我正在尋找一種方法來通過反射過濾掉具有unsafe
修改器的方法。它似乎不是一個方法屬性。通過反射確定方法是否不安全
有沒有辦法?
編輯:似乎這個信息不在元數據中,至少我不能在IL中看到它。但是,反射器在C#視圖中顯示unsafe
修改器。有關如何完成的任何想法?
編輯2:對於我的要求,我結束了一個檢查,即假定如果該方法的參數之一是一個指針,或返回類型是一個指針,則該方法是不安全的。
public static bool IsUnsafe(this MethodInfo methodInfo)
{
if (HasUnsafeParameters(methodInfo))
{
return true;
}
return methodInfo.ReturnType.IsPointer;
}
private static bool HasUnsafeParameters(MethodBase methodBase)
{
var parameters = methodBase.GetParameters();
bool hasUnsafe = parameters.Any(p => p.ParameterType.IsPointer);
return hasUnsafe;
}
這不處理,當然,這裏不安全塊的方法內執行,但同樣的情況,所有我感興趣的是方法簽名。
謝謝!
想要這樣做的原因是什麼?也許有另一種選擇。 – GenericTypeTea 2010-06-15 11:30:16
@GenericTypeTea我正在通過CodeDom做一些代碼生成。它不支持生成'unsafe'關鍵字,所以我想忽略具有'unsafe'方法的類型。 – 2010-06-15 11:32:11
我猜unsafe關鍵字只是一個標誌,告訴編譯器:不要在這裏生成編譯錯誤,因爲我打算使用不安全的代碼。反射器可能檢測到不安全的代碼,然後添加關鍵字。我注意到,如果在「安全」方法中使用不安全的塊,則反射器中的不安全關鍵字將在方法聲明中生成,因此它不會爲其生成塊。 所以這裏的答案是:如果Reflector可以檢測到mscorlib中的不安全代碼,您也可以... – Koen 2010-06-15 12:27:33