C# 如何在c中比较float和ArrayList对象#

C# 如何在c中比较float和ArrayList对象#,c#,C#,我想将数组元素与数字进行比较 ArrayList arr_obj = new ArrayList(); double a=1; arr_obj.Add(1); arr_obj.Add(2); for(i = 0; i < arr_obj.Count; i++) { if (arr_obj[i] == a) { Debug.Log("ext"); } } ArrayList arr_obj=new ArrayList(); 双a=1; arr_

我想将数组元素与数字进行比较

ArrayList arr_obj = new ArrayList();
double a=1;

arr_obj.Add(1);
arr_obj.Add(2);

for(i = 0; i < arr_obj.Count; i++)
{
    if (arr_obj[i] == a) 
    {
        Debug.Log("ext");
    }
}
ArrayList arr_obj=new ArrayList();
双a=1;
arr_obj.添加(1);
arr_obj.添加(2);
对于(i=0;i

此代码不起作用。有什么想法吗?

你正在将一个对象与无法编译的double进行比较。您必须在ArrayList(如下所示)中存储double,或者首先将值强制转换为int,然后再转换为double Ie
(double)(int)arr_obj[i]
,因为您只能取消装箱到与装箱完全相同的类型(在您的情况下是
int

如果希望坚持使用ArrayList(不推荐),请更改为

 ArrayList arr_obj = new ArrayList();
 double a=1.0;

 arr_obj.Add(1.0);
 arr_obj.Add(2.0);

 for(i=0;i<arr_obj.Count;i++){
            if ((double)arr_obj[i]==a) {
                   Debug.Log("ext");
            }
        }
ArrayList arr_obj=new ArrayList();
双a=1.0;
arr_obj.Add(1.0);
arr_obj.Add(2.0);

对于(i=0;i您必须将ArrayList强制转换为双精度:

(double)arr_obj[i]
ArrayList可以包含任何类型,因为它是一个对象列表。因此,如果要像这样强制转换它,需要确保每个数组列表都是double类型,方法是只在数组列表中放置double,或者在强制转换之前检查它,如:

if (arr_obj[i] is double)
{
    if ((double)arr_obj[i] == a)
    {   
        Console.WriteLine(arr_obj[i].ToString() + " is double");
    }
} 

您可以使用convert.ToDouble(arr_obj[i])对其进行转换

不起作用?没有太大帮助。不要再使用
ArrayList
。当C不支持泛型时,它属于旧时代。改用
List
。对于您的情况使用
List
,如果您喜欢将其用作异构集合,请使用
List
ArrayList中的值不是双倍,而是整数,因此强制转换将只需抛出一个异常。您将需要取消装箱作为
int
,然后强制转换为
double
。即
(double)(int)arr_obj[i]==a
我添加了一个检查,以查看它是否是双精度。但是在OP发布的代码中,它们不是双精度。它们是整数。每次都会跳过if块。是的,我知道,这是一个很好的观点。但问题是,如果有双精度,它将命中if。在他的示例中,他应该将变量a添加到列表中,它是双精度的。
if (arr_obj[i] is double)
{
    if ((double)arr_obj[i] == a)
    {   
        Console.WriteLine(arr_obj[i].ToString() + " is double");
    }
}