unity3d DefaultIfEmpty不适用于整个列表,但适用于第一个对象

cedebl8k  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(191)

代码如下:

public class LinqDatabase : MonoBehaviour
{
    [Serializable]
    public class Supplier
    {

        public string Name;
        public string District;
        public int Age;

    }

    [Serializable]
    public class Buyer
    {
        public string Name;
        public string District;
        public int Age;
    }

    [SerializeField] private List<Buyer> _buyers = new List<Buyer>();
    [SerializeField] private List<Supplier> _supplier = new List<Supplier>();

    void Start ( )
    {
        var leftOuterJJoin = from s in _supplier
            join b in _buyers on s.District equals b.District into NewbuyersGroup
            from BG in NewbuyersGroup.DefaultIfEmpty()
            select new
            {
                s.Name, s.District,
                BuyersName = BG?.Name ?? "No one here"
            };

        foreach ( var VARIABLE in leftOuterJJoin )
        {
            Debug.Log ( $"{VARIABLE.Name} {VARIABLE.District}" );
            Debug.Log ( VARIABLE.BuyersName );
        }
    }
}

我的问题是,如果你比较列表,它应该输出no one here for S5w和TTW mkm,因为在地区中没有匹配。但是,DefaultIfEmpty似乎不适用于整个列表,而只适用于第一个不匹配的对象(S4ko)。我如何将no one here应用于所有不匹配的地区?

tp5buhyn

tp5buhyn1#

它工作正常。
您已经在Unity Console中启用了Collapse选项,这意味着如果多次打印完全相同的消息,它只显示一次,但有一个小计数器。
您可以在右边框上看到

No one here

已记录3次。
=〉禁用Collapse,它应该可以正常工作。
请参阅fiddle
为了避免这种混淆,我会制作一个包含所有相关信息的日志。

Debug.Log($"{VARIABLE.Name} {VARIABLE.District} -> {VARIABLE.BuyersName}");

这本来就不会发生;)

相关问题