小编Gun*_*Gun的帖子

如何使用IEqualityComparer,LinQ Distinct从集合中删除重复项

我无法从集合中删除重复项,我已经为类Employee实现了IEqualityComparer仍然没有得到输出

static void Main(string[] args)
    {
        List<Employe> Employeecollection = new List<Employe>();

        Employeecollection.Add(new Employe("abc","def"));
        Employeecollection.Add(new Employe("lmn","def"));
        Employeecollection.Add(new Employe("abc", "def"));

        IEnumerable<Employe> coll = Employeecollection.Distinct(new Employe());

        foreach (Employe item in coll)
        {
            Console.WriteLine(item.fName + "   " + item.lName );
        }

    }
Run Code Online (Sandbox Code Playgroud)

下面是Employee类实现,这里我实现了IEqualityComparer

class Employe : IEqualityComparer<Employe>
{
    public string fName { get; set; }
    public string lName { get; set; }

    public Employe()
    {

    }

    public Employe(string firstName, string LastName)
    {
        this.fName = firstName;
        this.lName = LastName;
    }

    #region IEqualityComparer<pcf> Members

    public bool …
Run Code Online (Sandbox Code Playgroud)

c# linq list

33
推荐指数
3
解决办法
4万
查看次数

c#中的volatile关键字用途是什么?

我想Volatile在c#中看到关键字的实时使用.但我无法投射最好的例子.以下示例代码无Volatile关键字如何工作?

class Program
{
    private static int a = 0, b = 0;

    static void Main(string[] args)
    {
        Thread t1 = new Thread(Method1);
        Thread t2 = new Thread(Method2);

        t1.Start();
        t2.Start();

        Console.ReadLine();
    }

    static void Method1()
    {
        a = 5;
        b = 1;
    }

    static void Method2()
    {
        if (b == 1)
            Console.WriteLine(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我得到一个值为5.如何在不使用volatile关键字的情况下工作?

c# multithreading

6
推荐指数
1
解决办法
227
查看次数

如何获取参考变量的地址?

基本上我在这里想表示字符串是不可变的一个例子,所以我采取了下面的例子,我知道GetHashCode()不返回地址,但我如何区分两个变量引用不同的内存位置?

在下面的代码中,我想要一个字符串变量的地址

        string s = "hello";
        Console.WriteLine(s.GetHashCode());
        s = s + "User";
        Console.WriteLine(s.GetHashCode());
Run Code Online (Sandbox Code Playgroud)

但在String Builder中,GetHashCode()返回相同的值

        StringBuilder sb = new StringBuilder();
        sb.Append("hi");
        Console.WriteLine(sb.GetHashCode());
        sb.Append("hello");
        Console.WriteLine(sb.GetHashCode());
Run Code Online (Sandbox Code Playgroud)

c#

2
推荐指数
2
解决办法
151
查看次数

如何从双引号中删除换行符?

我有这样的场景:

"abcdef
 123sq
 gh"
Run Code Online (Sandbox Code Playgroud)

应该重新排列为"abcdef 123sq gh".

为此,我使用正则表达式,它工作正常:

Match match = Regex.Match(myString, @""".*""", RegexOptions.Singleline);
if (match.Success) {
  myString= myString.Replace(match.Value, match.Value.Replace("\n", ""));
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于以下场景:

"abc" "def"
asdf123456
"abc"
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,它考虑了第一个和最后一个引号,并将3行作为一个返回.

c# regex

1
推荐指数
2
解决办法
1194
查看次数

如何在Linq中对组内的元素进行分组

我有一个Employee Collection,我希望以这样的方式进行过滤,即只应过滤前2列,并且应附加第3列值,最终结果应该在一行中

以下是我的代码

List<Employe> Employeecollection = new List<Employe>();

        Employeecollection.Add(new Employe("Employee1", "Dept1","Language1"));
        Employeecollection.Add(new Employe("Employee2", "Dept2", "Language2"));
        Employeecollection.Add(new Employe("Employee3", "Dept3", "Language3"));
        Employeecollection.Add(new Employe("Employee3", "Dept3", "Language3"));
        Employeecollection.Add(new Employe("Employee1", "Dept1", "Language2"));

        foreach (Employe item in Employeecollection.GroupBy(x => new { fName = x.EmpName, lName = x.EmpDept, mName = x.KnownLanguages }).Select(g => g.First()))
        {
            Console.WriteLine(item.EmpName + "   " + item.EmpDept + " " + item.KnownLanguages);
        }
Run Code Online (Sandbox Code Playgroud)

但我想显示如下结果

Employee1 Dept1 Language1,Language2
Employee2 Dept2 Language2
Employee3 Dept3 Language3

c# linq

1
推荐指数
1
解决办法
66
查看次数

标签 统计

c# ×5

linq ×2

list ×1

multithreading ×1

regex ×1