[英]Generating warnings for Int32 to Int64 casts
有沒有辦法為隱式int
到long
轉換生成編譯時警告? (答案涉及靜態分析工具,如FxCop會很好。)
將int
轉換為long
顯然是一個安全的操作,但是我們說我們有一個庫,它曾經為其標識符提供了int
值,現在已升級為使用所有這些值的long
值。
現在,客戶端代碼需要相應更新。 因為如果客戶端向期望Int64
的方法提供Int32
參數 - 很可能需要更新客戶端代碼。
示例場景如下:
private void OnProcessGizmoClick()
{
int gizmoId = 2;
// I want the following usage to generate warnings:
GizmoFactoryInstance.ProcessGizmo(gizmoId);
}
// Library code
public void ProcessGizmo(long gizmoId);
我認為最好的方法是使用Int32參數輸入重載該方法,該輸入在內部只能執行強制轉換為Int64 - 但您的重載方法可能被標記為已棄用。
[Obsolete("Please use an Int64 for your identifier instead")]
然后Visual Studio將看到兩個版本,並使用Int32聲明,該聲明將給出不推薦的警告。
如果在以后的版本中,或者對於您絕對不希望使用Int32參數調用的某些方法,您決定是否要導致編譯器錯誤,您還可以將其更新為以下內容。
[Obsolete("Please use an Int64 for your identifier instead", true)]
使用long
和int
隱式轉換來定義自己的類型; 從int
隱式轉換發出警告:
public struct GizmoInteger
{
private long m_Value;
private GizmoInteger(long value)
{
m_Value = value;
}
[Obsolete("Use long instead")]
public static implicit operator GizmoInteger(int value)
{
return new GizmoInteger(value);
}
public static implicit operator GizmoInteger(long value)
{
return new GizmoInteger(value);
}
}
void Foo(GizmoInteger i)
{
}
// warning
Foo(4);
// OK
Foo(4L);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.