我需要通過PropertyInfo來分配值。使用PropertyInfo將值分配給包含自定義索引器的包裝類
當屬性的類型是我的自定義類(一個包含字典的封裝器,旨在包含同一文本的多個語言版本)時,我遇到了一些問題。
它看起來像:
public class MultilingualString
{
Dictionary<string, string> Versions;
public string this[string languageCode]
{
get
{
if (Versions.Keys.Contains(languageCode))
{
return Versions[languageCode];
}
return null;
}
set
{
if (Versions.Keys.Contains(languageCode))
{
Versions[languageCode] = value;
}
else
{
Versions.Add(languageCode, value);
}
}
// [blah blah other stuff...]
}
左右;現在我有這個PropertyInfo對象 - 和一個字符串值,我想用默認的語言代碼分配。
certainPropertyInfo.SetValue(
instance, // an instance of some class exposing a MultilingualString type property
someString,
new[] { "eng" }); // some default language code
這會引發異常。
我猜最後一個參數SetValue是爲了收集索引,它不適用於自定義索引器。
切實我想要做的是,明明:
instance.msProperty["eng"] = someString;
但我只給msProperty的名字,這就是爲什麼我使用反射。
到目前爲止,我還想過實現一個隱含的經營者(MultilingualString類中),允許字符串值轉換爲MultilingualString ...但我可以看到一些問題,這種做法如。這個靜態運算符幾乎沒有辦法「知道」默認語言代碼是什麼。
我可以通過反射實現我的目標嗎?
你有沒有PropertyInfo對象?如果你這樣做,你是如何得到這個物體的?你確定你有合適的嗎? –
另外,你爲什麼需要使用反射? –
我知道對象的類型,我動態地調用它(使用Activator)並用DataTable中的數據填充它。我正在開發的應用程序的用戶應該將DataTable列映射到我的業務類的不同屬性。 –