Мне нужно присвоить значение через 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 ... но я вижу некоторые проблемы с таким подходом, например.этот статический оператор вряд ли мог бы «знать», какой код языка по умолчанию.
Могу ли я достичь своей цели с помощью отражения?