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 クラス内に) 実装することを考えてきましたが、そのアプローチにはいくつかの問題があります。この静的演算子には、デフォルトの言語コードが何であるかを「知る」方法はほとんどありません。
リフレクションによって目標を達成できますか?