Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法实现IComparable<;T>;在C中#_C#_Arrays_Icomparable - Fatal编程技术网

C# 无法实现IComparable<;T>;在C中#

C# 无法实现IComparable<;T>;在C中#,c#,arrays,icomparable,C#,Arrays,Icomparable,我正在尝试使用array.sort()按名称对Unity中的数组进行排序 我已经尽可能多地阅读了,但仍然无法将其应用到我的小项目中。以下是我到目前为止的情况: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class UIController : MonoBehaviour, IComparable

我正在尝试使用
array.sort()
按名称对Unity中的数组进行排序

我已经尽可能多地阅读了,但仍然无法将其应用到我的小项目中。以下是我到目前为止的情况:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

public class UIController : MonoBehaviour, IComparable<Slot>
{
    public static UIController instance;
    public Text uiMessageBox;
    public Slot[] slots;

    private void Awake()
    {
        if (instance == null)
            instance = this;
        else
            Destroy(this);

        DontDestroyOnLoad(this);

        slots = FindObjectsOfType<Slot>();
        Array.Sort(slots, ); // HELP: NOT SURE WHAT TO PUT HERE
    }

    public int CompareTo(Slot other)
    {
        return this.name.CompareTo(other.name);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
使用制度;
公共类:单行为,IComparable
{
公共静态实例;
公共文本框;
公众时段[]个时段;
私人空间
{
if(实例==null)
实例=此;
其他的
摧毁(这个);
DontDestroyOnLoad(此);
slots=FindObjectsOfType();
Array.Sort(slots,);//帮助:不确定要在此处放置什么
}
公共整数比较(插槽其他)
{
返回此.name.CompareTo(其他.name);
}
}
注意,我删除了我认为在这个类中不相关的部分(例如在屏幕上显示消息字符串的代码等)


另请注意:我在这里实现了
IComparable
,但我也尝试了
IComparable
。(正如我所说,我在这里和其他网站上看到了很多示例,但在我的代码中无法完全实现。)

为什么不使用委托形式

Array.Sort(slots, (slot1, slot2) => slot1.name.CompareTo(slot2.name));
如果仍要实现IComparable接口,则必须将其写入Slot类中

您还可以在任何类中实现接口

class AnyClass : IComparer<Slot>
{
    public int Compare(Slot slot1, Slot slot2)
    {
        return slot1.name.CompareTo(slot2.name);
    }
}
class AnyClass:IComparer
{
公共整数比较(插槽slot1、插槽slot2)
{
返回slot1.name.CompareTo(slot2.name);
}
}

为什么不使用委托表格

Array.Sort(slots, (slot1, slot2) => slot1.name.CompareTo(slot2.name));
如果仍要实现IComparable接口,则必须将其写入Slot类中

您还可以在任何类中实现接口

class AnyClass : IComparer<Slot>
{
    public int Compare(Slot slot1, Slot slot2)
    {
        return slot1.name.CompareTo(slot2.name);
    }
}
class AnyClass:IComparer
{
公共整数比较(插槽slot1、插槽slot2)
{
返回slot1.name.CompareTo(slot2.name);
}
}

我能够将代码保存在我的UIController类中,这就是我想象的情况(因为我在那里构建了插槽数组,所以我也觉得在那里对其进行排序是正确的。)

下面是它是如何完成的:

public class UIController : MonoBehaviour, IComparer<Slot>
{
public static UIController instance;
public Text uiMessageBox;
public Slot[] slots;


private void Awake()
{

    slots = FindObjectsOfType<Slot>();
    Array.Sort(slots, this); // i just passed 'this' as the IComparer parameter :)

}

public int Compare(Slot x, Slot y)
{
   return x.name.CompareTo(y.name);
}
公共类UIController:monobhavior,IComparer
{
公共静态实例;
公共文本框;
公众时段[]个时段;
私人空间
{
slots=FindObjectsOfType();
Sort(slots,this);//我刚刚将'this'作为IComparer参数传递:)
}
公共整数比较(插槽x、插槽y)
{
返回x.name.CompareTo(y.name);
}

}

我能够将代码保存在我的UIController类中,这就是我想象的情况(因为我在那里构建了插槽数组,所以我也觉得在那里对其进行排序是正确的。)

下面是它是如何完成的:

public class UIController : MonoBehaviour, IComparer<Slot>
{
public static UIController instance;
public Text uiMessageBox;
public Slot[] slots;


private void Awake()
{

    slots = FindObjectsOfType<Slot>();
    Array.Sort(slots, this); // i just passed 'this' as the IComparer parameter :)

}

public int Compare(Slot x, Slot y)
{
   return x.name.CompareTo(y.name);
}
公共类UIController:monobhavior,IComparer
{
公共静态实例;
公共文本框;
公众时段[]个时段;
私人空间
{
slots=FindObjectsOfType();
Sort(slots,this);//我刚刚将'this'作为IComparer参数传递:)
}
公共整数比较(插槽x、插槽y)
{
返回x.name.CompareTo(y.name);
}

}

我认为您还需要实现非泛型的
IComparable
好的,我会尝试,但实际上我认为我在第一次尝试时已经做到了。但我会再试一次。TaUse接受lambda的符号。否则,将
CompareTo
方法移动到一个单独的类,并将
new ThatClass()
传递到
Array.Sort
。IComparable意味着您可以将其与T进行比较。您需要让Slot实现IComparable或make(例如,我可能会创建一个单独的SlotComparer类)您的UIController类实现IComparer。@BigTLarrity忘记我的评论,Wai Ha Lee做对了我认为您还需要实现非泛型的
IComparable
好的,我会尝试,但实际上我认为我在第一次尝试时已经做到了。但我会再试一次。TaUse接受lambda的符号。否则,将
CompareTo
方法移动到一个单独的类,并将
new ThatClass()
传递到
Array.Sort
。IComparable意味着您可以将其与T进行比较。您需要让Slot实现IComparable或make(例如,我可能会创建一个单独的SlotComparer类)你的UIController类实现IComparer。@BigTLarrity忘记我的评论,Wai Ha Lee做对了!谢谢你,但同时我刚刚修复了它(主要感谢李惠霞)。我能把这一切都留在我的课堂上,这太棒了。我将把它作为一个答案来展示。。谢谢大家@shingo,
Array.Sort(slots,(slot1,slot2)=>String.Compare(slot1.Name,slot2.Name,StringComparison.OrdinalIgnoreCase))会更好!我以前曾多次使用过委托和lambda函数符号,但那是很久以前的事了,我忘记了如何使用它们。这肯定是我需要进一步学习的东西,以便更好地理解和使用它。Cheers如果您只需要在一个位置进行排序,我认为第一个重写表单编写速度最快。ヽ(✿゚▽゚)ノ天哪!谢谢你,但同时我刚刚修复了它(主要感谢Wai Ha Lee)。我能够将它全部保存在我的UIController类中,这很好。我将把它作为一个答案发布以演示…谢谢大家!@shingo,
Array.Sort(slots,(slot1,slot2)=>String.Compare(slot1.Name,slot2.Name,StringComparison.OrdinalIgnoreCase))
会更好!我以前使用过委托和lambda函数符号好几次,但那是很久以前的事了,我忘记了如何使用它们。这肯定是我需要进一步学习才能更好地理解和使用的东西。谢谢。如果只需要在一个地方排序,我认为第一个重写表单编写起来最快. ヽ(✿゚▽゚)ノ哈哈!这就是我为你写的解决方案!:)哈哈,很抱歉打败了你,哈哈,谢谢你的帮助!(我相信我很快会需要更多的哈哈:P)哈哈!这个