[英]Comparing two variables when the value is the same but the type is different (e.g. Int16, Int32, Int64)
我需要比較兩個變量,以確定它們是否相同。 這些變量被轉換為“對象”,可以分配任何.NET類型。
我遇到的問題是它們是否都是數字。 在它們具有相同值(例如它們都是-1)但具有不同類型(例如,一個是Int32,另一個是Int64)的情況下,然后object.Equals返回false。
是否有一種比較通用的方法來比較忽略變量類型的值,只看數值?
假設類型是盒裝整數,所以你不能簡單地==它們,你可能想使用Convert.ToInt64將所有值轉換為long,然后使用==進行比較。 如果你想支持UInt64,你需要額外的邏輯。
只需使用通常的運算符,如==
, <
等.Int16將自動轉換為Int32,因為沒有信息丟失。 Int *是值類型,因此值會自動進行比較。
我能夠使用System.IConvertible接口來解決值類型的這個問題:
object expectedValue = (int) 42;
object testValue = (long) 42;
// This handles equal values stored as different types, such as int vs. long.
if (testValue is IConvertible testValueConvertible
&& expectedValue is IConvertible)
{
testValue = testValueConvertible
.ToType(expectedValue.GetType(),
System.Globalization.CultureInfo.InvariantCulture);
}
if (object.Equals(testValue, expectedValue))
Console.WriteLine("Values are equal");
else
Console.WriteLine("Values are NOT equal");
我創建了這個.NET Fiddle作為演示: https : //dotnetfiddle.net/GSUjIS
假設您有一個帶有兩個object
參數的方法,您可以創建一個帶有兩個long
參數的重載。 我相信(盡管我還沒有驗證)傳遞2個int會選擇longs的重載,而不是對象。
另一個有點hackish選項是在兩者上調用ToString()並比較字符串。 這只有在它們都是整數類型(即沒有double
或decimal
)時才有效,因此您需要事先檢查類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.