2010-07-07 59 views

回答

2

所以,你要分配基於當前值的類型的新的價值?如果是這樣的:

if (myClass.MyProperty is int) 
{ 
    myClass.MyProperty = (int) id; 
} 
else 
{ 
    myClass.MyProperty = id; 
} 

可以與條件表達式做到這一點,但它是一個有點難看:

myClass.MyProperty = myClass.MyProperty is int 
    ? (object) id : (int) id; 

或者:

myClass.MyProperty = myClass.MyProperty is int 
    ? (object) (int) id : id; 

還是要想清楚,你真的,真的很想在這兩種情況下拳擊:

myClass.MyProperty = myClass.MyProperty is int 
    ? (object) (int) id : (object) id; 
+0

爲此,使用Convert.ChangeType()會不會更容易/更清晰? 'myClass.MyProperty = Convert.ChangeType(id,myClass.MyProperty.GetType());' – LBushkin 2010-07-07 19:33:53

+0

@LBushkin:嗯......可能。沒有一種方式感覺特別好,說實話... – 2010-07-07 19:38:00

+0

是的。 OP的要求有點奇怪 - 但似乎可以將它們提煉爲:*「將值分配給MyProperty時,將該值轉換爲與MyProperty相同的類型」 - - ChangeType調用捕獲的很好。它避免了對多個地方的兼容類型的假設......如果分配的MyProperty值已經違反了預期的不變性,那麼可能會傳播錯誤。 – LBushkin 2010-07-07 20:09:39

2

你可以這樣做:

if(myClass.MyProperty is int){ 
..... do int stuff 
} 
else 
{ 
..... do long stuff. 
} 

Is Operator.

1

正如有人說的,但我建議你使用轉換,而不是鑄造:

long l = 2147483648; // int.MaxValue + 1 
int i = (int)l; // i == -2147483648 oops 
i = Convert.ToInt32(l); // Overflow exception 
+1

或者只是在檢查的上下文中操作,當然。 – 2010-07-07 19:44:40

0

這個問題沒有意義。 1.如果屬性是一個對象,您可以指定任何你想要的。對象屬性的類型是對象。 2.如果你想看到潛在的私人領域......你怎麼知道有一個潛在的領域開始?如果你知道有一個私人領域,你爲什麼不知道它的類型?

如果你處於非常奇怪的第二種情況,你可能會做2件事。 a)在屬性中執行代碼以進行檢查和轉換。 b)使用包含有關基礎字段的元數據的屬性來裝飾屬性,並通過反射來讀取它。

總的來說,你的問題表明設計問題,所以你最好考慮重新設計,而不是黑客。

+0

雖然我同意這可能是一個潛在的設計問題,但問題*有意義 - 它試圖根據當前值爲特定類型分配新值。 – 2010-07-07 19:38:45

+0

感謝您的評論,也許我簡化了我的問題;它基於最初與LLBLGen實體合作。 – 2010-07-07 19:39:07

相關問題