我需要通过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 ......但我可以看到这种方法存在一些问题,例如。这个静态运算符几乎没有办法“知道”默认语言代码是什么。
我可以通过反思来实现我的目标吗?