[英]Is it possible to modify or remove an anonymous type from an object in c#?
我有一段類似下面的代碼:
var selected = “A”;
bool isSelected = selected == "A" || selected == "C";
var codeLists = new
{
displayProperty1 = isSelected ? "property1" : null,
displayProperty2 = isSelected ? "property2" : null,
displayProperty3 = selected == "C" ? "property3" : null
};
因此,我的目標是消除不滿足條件的財產。 在上面的代碼中, selected
是"A"
。 因此, displayProperty3
的值為null
。 但是我想消除displayProperty3
以便如果選擇的是“ A”,則對象中應該只有2 properties
。
如果有任何適當有效的方法可以做到這一點,我將不勝感激。
我認為您不想刪除該屬性。 您真正想要做的是在UI上進行測試,如果該測試為null,則該測試不會顯示任何內容。
不,匿名類型仍然遵循其他類型的規則,只是在編譯時未明確定義它們。 要執行您想要的操作,您必須定義兩種不同的類型。
如果您不想在UI中顯示該屬性(例如,如果您綁定到自動生成的網格並且您不希望將其作為列),則可以在UI中處理該屬性。
但是,如果必須執行此操作,則必須創建兩種不同的類型(匿名或顯式):
var selected = "A";
bool isSelected = selected == "A" || selected == "C";
dynamic codeLists;
if(selected == "C")
{
codeLists = new
{
displayProperty1 = isSelected ? "property1" : null,
displayProperty2 = isSelected ? "property2" : null
};
}
else
{
codeLists = new
{
displayProperty1 = isSelected ? "property1" : null,
displayProperty2 = isSelected ? "property2" : null,
displayProperty3 = "property3"
};
}
如果創建具有公共屬性的基本類型會更好 ,但是無論哪種方式,它們都將是兩種不同的類型:
public class CodeList
{
public string displayProperty1 {get; set;}
public string displayProperty2 {get; set;}
}
public class CodeListC : CodeList
{
public string displayProperty3 {get; set;}
// Other two properties will be inherited
}
如果我正確理解,您正在構建的對象應該以某種方式表示接口,對嗎? 現在,基於屬性的存在/不存在來構建接口對我來說並不是很吸引人,我認為這實際上是一個糟糕的主意,因為您的代碼將成為一場噩夢。
我認為您應該修改方法。 您是否考慮過使用字典 ? 您仍然可以檢查是否存在某些東西,再加上處理所需的代碼,這將變得更加簡單(首先,沒有任何反射...)。
這是您在問題中發布的內容的等效代碼:
var selected = “A”;
bool isSelected = selected == "A" || selected == "C";
var codeList = new Dictionary<string, string>();
if(isSelected) {
codeList["displayProperty1"] = "property1";
codeList["displayProperty2"] = "property2";
}
if(selected == "C")
codeList["displayProperty3"] = "property3";
如果!isSelected,則詞典將不包含名為displayProperty1和displayProperty2的鍵。
僅僅因為未顯式鍵入匿名對象(和var
)並不意味着它們沒有類型。 該類型需要能夠在編譯時完全定義,否則您的代碼將無法生成。
由於與性能的類型的對象displayProperty1
和displayProperty2
是不同的類型,一個與這兩個加displayProperty3
,那么你就不能試着他們倆堅持到相同的變量,任何比你更可以把一個string
和int
變成同一個
您應該看一下動態而不是var:
http://msdn.microsoft.com/en-us/library/dd264736.aspx
Var是在編譯時創建新的強類型實體的方法。 動態類型不是強類型,可以在代碼執行期間添加/刪除屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.