我有一些集合List<ObjectId>
稱爲'ids'。我想讓用戶爲'ids'創建靈活的過濾器。解析表達式
我想創建一個文本框,用戶必須編寫一個過濾器字符串。例如:
item => item.ClassName == "Rectangle"
這個表達式我需要申請'ids'上的每個項目。我怎樣才能嘗試解析它的驗證?我如何在我的代碼中爲每個「ID」項目運行它?
我有一些集合List<ObjectId>
稱爲'ids'。我想讓用戶爲'ids'創建靈活的過濾器。解析表達式
我想創建一個文本框,用戶必須編寫一個過濾器字符串。例如:
item => item.ClassName == "Rectangle"
這個表達式我需要申請'ids'上的每個項目。我怎樣才能嘗試解析它的驗證?我如何在我的代碼中爲每個「ID」項目運行它?
你爲什麼不創建一個擴展列表中的一個類,那麼你可以創建get方法,如:
public class ObjectIdCollection : List<ObjectId>
{
public ObjectIdCollection() { }
public ObjectId this[string classname]
{
get
{
foreach(ObjectId id in this) if(id.ClassName == classname) return id;
return null;
}
}
}
這將與任何指定的類名返回的第一個ID,如果沒有則爲null發現
否,過濾器的表達式可以是ANY。用戶必須通過文本框進行設置。我必須用它表達。 –
優勢,他們有很多lambda expression parsers可用。
使用以下邏輯解析並執行基於文本框(說txtFilter
)過濾器字符串。
var ids = new List<ObjectId>
{
new ObjectId { ClassName = "Rectangle1", ID = 1 },
new ObjectId { ClassName = "Rectangle2", ID = 2 }
};
string code = txtFilter.Text; (Ex: "item => item.ClassName == \"Rectangle1\"" ;)
Func<ObjectId, bool> func = ExpressionParser.Compile<Func<ObjectId, bool>>(code);
ids.ForEach(obejctId =>
{
Console.WriteLine(func.Invoke(obejctId));
});
輸出是
True
False
這是這樣的:http://msdn.microsoft.com/en-us/library/bb397951.aspx – BlackBear
的ObjectId是'int'或類? –
@CongLong它是階級,而不是結構。 –