2011-11-13 5 views
0

ジェネリック型に「文字列」に変換することはできません私たちは、クラスが暗黙的に<T>

public class MyPropertyBase 
{ 
    public int StartOffset { get; set; } 
    public int EndOffset { get; set; } 
} 

public class MyProperty<T> : MyPropertyBase 
{ 
    public MyProperty(T propertyValue) 
    { 
     PropertyValue = propertyValue; 
    } 

    public T PropertyValue { get; set; } 
} 

class BE 
{ 
    public MyProperty<string> FUND_CITY { get; set; } 

    public MyProperty<int> SomeOtherProperty { get; set; } 

    public List<MyPropertyBase> MyDataPoints { get; set; } 
} 

を以下している私はobjBEとしてBEのインスタンスを作成し、objBE.FUND_CITY="Some Value"を割り当てると、それはエラーを与える:

"Can't convert "string" to MyProperty.

答えて

1

FUND_CITYstringではありませんが、MyProperty<string>タイプです。あなたは何をする必要があります:

objBE.FUND_CITY = new MyProperty<string>("Some Value"). 

それとも、あなたはパラメータなしのコンストラクタを持っている場合、あなたが行うことができます:

objBE.FUND_CITY = new MyProperty<string>(); 
objBE.FUND_CITY.PropertyValue = "Some Value"; 
0

付きあなたの現在のデザインは、書く必要があります

objBE.FUND_CITY.PropertyValue = "Some Value"; 

BEFUND_CITYプロパティがstringではないため、MyProperty<string>のプロパティ自体にPropertyValueというプロパティがあるためです。 BEインスタンスobjBEFUND_CITYメンバーは、タイプMyProperty<string>ないstringであるので、あなたが間違った型に値を代入しようとしているため

3

これが発生します。

objBE.FUND_CITY.PropertyValue = "Some Value"; 

をし、それはあなたがそうでなければ、以下のような何かを行うことができ、直接そのメンバーを設定するために探していた結果が得られるかもしれません:

あなたが行うことができます。

objBE.FUND_CITY = new MyProperty<string>("Some Value"); 

か、暗黙の型を使用したい場合は...正しいです

objBE.FUND_CITY = new MyProperty("Some Value"); 
+0

コンパイル時エラーが除去されます。しかし、実行時エラーが発生します:{"オブジェクト参照がオブジェクトのインスタンスに設定されていません"} –

+0

動作しませんでした。私が試したとき –

+0

@ user1043788はいこれは、 'FUND_CITY'で' PropertyValue'に値を代入しようとすると起こります。これは 'BE'オブジェクトの' FUND_CITY'プロパティを初期化することなく(null参照です)これを 'BE'型のイニシャライザで行うか、または別の例を投稿して使用することができます。暗黙の型付きの例は、@leppieが提案する暗黙的な演算子の設計変更を実装しないと決めた場合です。 –

1

はobjBE.FundCity =新MYPROPERTY( "someValueの")を試してみてください。

3

この構文を使用する場合は、暗黙の変換が必要です。

例:

public class MyProperty<T> : MyPropertyBase 
{ 
    public MyProperty(T propertyValue) 
    { 
     PropertyValue = propertyValue; 
    } 

    public T PropertyValue { get; set; } 

    public static implicit operator MyProperty<T>(T t) 
    { 
     return new MyProperty(t); 
    } 
} 
+2

素晴らしい提案! –

+0

心に感謝します。出来た!。素晴らしい提案! –

+0

これは間違いなくこの問題を解決するより効率的な方法です。また、 "MyProperty"型からT型への暗黙的な変換を作成することもできます。これは、プロパティから割り当てを戻すこともできます。これにより、特別な機能を必要としないときにプロパティが透過的になります。 –

関連する問題