2011-03-30 19 views
0

我使用反射來調用C#中的方法和訪問屬性。這些屬性和方法的名稱已經被聲明(來自某個數據源的字符串),但不是以'方法友好'的方式聲明的。toTitleCase,同時保留in-word upperCasing

例如,一個特定的對象具有屬性「HasAModifiedShortStyle」 在運行時我不知道這一點。我知道我正在尋找一個屬性描述爲「有一個修改過的ShortStyle」。

那麼容易的事是使用

System.Globalization.CultureInfo.CurrentCulture.TextInfo) 

轉換爲標題字符和替換「」與「」。

這工作正常,但TextInfo.ToTitleCase()將「ShortStyle」更改爲「Shortstyle」。那個小寫字母''導致我找不到propertyName。 作爲參考,我在訪問與

currentObjectValue.GetType().GetProperty(propertyName); 

是否有一個簡單的方法來轉換成首字母大寫,同時保留在字capitilization的財產?

回答

1

這個怎麼樣的做法?

currentObjectValue.GetType().GetProperties().FirstOrDefault(propInfo => propInfo.Name.Equals("Shortstyle", StringComparison.InvariantCultureIgnoreCase)); 
+0

是的,雖然丹尼爾的答案確實需要,但所有其他與案例相關的問題都可以通過此答案輕鬆解決。 – MoSlo 2011-03-30 09:11:16

1

在你的描述只是使用每個單詞:

yourString[0].ToString().ToUpper() + yourString.Substring(1) 
+0

謝謝,需要一些簡單的實現。進入其他問題,如短語「反訴」需要成爲「CounterProceeding」,但必須分開看看。如果我的輸入只有字母,這會更容易! – MoSlo 2011-03-30 09:02:07

0

這將分裂的描述字符串爲單個單詞,首字母大寫,然後加入他們回一個字符串:

string s = "has a modified ShortStyle"; 
propName = string.Join(string.Empty, 
         (from word in s.Split(' ') 
         select word.Substring(0, 1).ToUpper() + word.Substring(1)).ToArray());