我創建了一個簡單的類,它是DynamicObject的後代:「‘對象’不包含‘財產’,沒有擴展方法‘財產’接受型‘對象’的第一個參數的定義可以發現」
public class DynamicCsv : DynamicObject
{
private Dictionary<string, int> _fieldIndex;
private string[] _RowValues;
internal DynamicCsv(string[] values, Dictionary<string, int> fieldIndex)
{
_RowValues = values;
_fieldIndex = fieldIndex;
}
internal DynamicCsv(string currentRow, Dictionary<string, int> fieldIndex)
{
_RowValues = currentRow.Split(',');
_fieldIndex = fieldIndex;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
dynamic fieldName = binder.Name.ToUpperInvariant();
if (_fieldIndex.ContainsKey(fieldName))
{
result = _RowValues[_fieldIndex[fieldName]];
return true;
}
return false;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
dynamic fieldName = binder.Name.ToUpperInvariant();
if (_fieldIndex.ContainsKey(fieldName))
{
_RowValues[_fieldIndex[fieldName]] = value.ToString();
return true;
}
return false;
}
}
我做使用後代對象以下內容:
protected string[] _currentLine;
protected Dictionary<string, int> _fieldNames;
...
_fieldNames = new Dictionary<string, int>();
...
_CurrentRow = new DynamicCsv(_currentLine, _fieldNames);
當我嘗試使用_CurrentRow用點符號:
int x = _CurrentRow.PersonId;
我得到以下錯誤消息:
「‘對象‘不包含關於’屬性‘和沒有擴展方法’屬性’接受型‘對象’的第一個參數可以定義找到」
我可以用VB沒有任何問題,雖然解決該房產在即時窗口:
? _CurrentRow.PersonId
也許這只是我..但我就是不能看到你聲明'PersonId' ..是它的屬性?公共變量? .. 在哪兒?你如何聲明'_CurrentRow'? –