2011-11-22 21 views
2

我可能會錯過某些東西,但我得到了我認爲似乎是一個奇怪的錯誤,其他開發人員都沒有得到相同的代碼...奇怪的「使用可能未分配的字段'類型'」 - CS0170

public void SomeMethod(... symbolInfo) 
{ 
    ElementId elementId = symbolInfo.GetElementIds().Head(true); 
    if (elementId.HasValue()) 
    { 
     // error here "Use of possibly unassigned field 'Type'" 
     object element = repository.FindElement(elementId.Type, elementId.Id); 
     if (element != null) { ... } 
    } 
} 

public struct ElementId 
{ 
    public string Id; 
    public MDAPI_ElementType Type; 
} 

用下面的擴展方法:

public static bool IsEmpty(this ElementId id) 
{ 
    return id.Type == ElementType.ElementUnknown || string.IsNullOrEmpty(id.Id); 
} 

public static bool HasValue(this ElementId id) 
{ 
    return !id.IsEmpty(); 
} 

誰能告訴我爲什麼會不建?

+0

'symbolInfo.GetElementIds()。Head(true)'如何創建'ElementId'? – ChrisF

+0

@ChrisF:symbolInfo是一個COM對象,GetElementIds()是一個實例成員。我不是100%確定它在內部做什麼。頭部嘗試從IEnumerable 中檢索第一個項目,但如果找不到一個,則返回默認(T)。將.Head(true)更改爲.ToList()[0]會導致相同的錯誤,所以我不認爲它的默認值(T)不幸。 – Ian

回答

1

我已經設法解決我的構建錯誤,而不是調用一個直接使用ElementId的擴展方法。我不知道爲什麼這會修復這個問題!

public static object FindElement(this IMRepository rep, ElementId element) 
{ 
    return rep.FindElement(element.Type, element.Id); 
} 
+0

即使我在使用FILETIME時遇到同樣的錯誤。基本上我需要限制我的應用程序的CPU使用率。 – Vikneshwar