C# 类中没有重复的序列号序列

C# 类中没有重复的序列号序列,c#,C#,假设我有一门课: public class User{ public string Name {get;set;} public int SeqNumber {get;set;} } public List<User> UserClass {get;set;} 公共类用户{ 公共字符串名称{get;set;} public int SeqNumber{get;set;} } 公共列表用户类{get;set;} 举个动态的例子,我有10个用户。根据用户数量,每个S

假设我有一门课:

public class User{
    public string Name {get;set;}
    public int SeqNumber {get;set;}
}

public List<User> UserClass {get;set;}
公共类用户{
公共字符串名称{get;set;}
public int SeqNumber{get;set;}
}
公共列表用户类{get;set;}
举个动态的例子,我有10个用户。根据用户数量,每个SeqNumber都是唯一的,从1到10。SeqNumber将用于按升序对用户进行排序。但是,SeqNumber必须是唯一的,并且保持在用户数量的范围内

UserClass = new List<User>() {
     new User({Name = "Rose", SeqNumber = 1}),
     new User({Name = "Ryu", SeqNumber = 2}),
     new User({Name = "Sagat", SeqNumber = 3}),
     new User({Name = "Dhalsim", SeqNumber = 4}),
     new User({Name = "Zangief", SeqNumber = 5}),
     new User({Name = "Ken", SeqNumber = 6}),
     new User({Name = "Chun-Li", SeqNumber = 7}),
     new User({Name = "Vega", SeqNumber = 8}),
     new User({Name = "Balrog", SeqNumber = 9}),
     new User({Name = "M. Bison", SeqNumber = 10}),
};
UserClass=newlist(){
新用户({Name=“Rose”,SeqNumber=1}),
新用户({Name=“Ryu”,SeqNumber=2}),
新用户({Name=“Sagat”,SeqNumber=3}),
新用户({Name=“Dhalsim”,SeqNumber=4}),
新用户({Name=“Zangief”,SeqNumber=5}),
新用户({Name=“Ken”,SeqNumber=6}),
新用户({Name=“Chun Li”,SeqNumber=7}),
新用户({Name=“Vega”,SeqNumber=8}),
新用户({Name=“Balrog”,SeqNumber=9}),
新用户({Name=“M.Bison”,SeqNumber=10}),
};
假设有人决定将Ryu的SeqNumber更改为6,作为用法示例。萨加特的将移到2,达尔西姆的将移到3,赞吉的将移到4,肯的将移到5。
反过来,如果我把野牛先生的序号改为2呢?另一个用户的SeqNumber应增加1。如何实现这一点?

将您的用户放入列表中,以便您可以动态访问他们:

UserClass = new List<User>() {
  new User({Name = "xxxx", SeqNumber = 1}),
  new User({Name = "xxxx", SeqNumber = 2}),
  new User({Name = "xxxx", SeqNumber = 3}),
  ...
};

您可以通过使用以下扩展方法来实现这一点,该方法使用列表中的索引器:

public static void MoveAndRecalculateSequence(
    this IList<User> users, int moveFromIndex, int moveToIndex)
{
    // Capture a reference to the user we want to move.
    var user = users[moveFromIndex];

    // Remove it from the list at it's current index.
    users.RemoveAt(moveFromIndex);

    // Insert the user at the required destination.
    users.Insert(moveToIndex, user);

    // Recalculate the seq number using the index of the list.
    for(int i = 0; i < users.length; i++)
    {
        users[i].SeqNumber = i + 1;
    }
}

你能解释一下为什么要这样做,你想达到什么目的吗?SeqNumber是一个排序顺序,可以在其他地方使用。基于数据库模式,数字不能完全相同。只是我不确定如何在标题中表达这个问题。有人想帮我吗?我想问题不在于问题的标题,而是很难理解你想做什么。Guffa在下面的回答将针对您概述的非常具体的案例,但我怀疑您有一个更一般的案例,很难从您提供的信息中推断出来。我想我已经把我的要求表达得更清楚了。这有助于理解我想做什么吗?为什么要投否决票?如果你不解释你认为错误的地方,那就无法改善答案。
public static void MoveAndRecalculateSequence(
    this IList<User> users, int moveFromIndex, int moveToIndex)
{
    // Capture a reference to the user we want to move.
    var user = users[moveFromIndex];

    // Remove it from the list at it's current index.
    users.RemoveAt(moveFromIndex);

    // Insert the user at the required destination.
    users.Insert(moveToIndex, user);

    // Recalculate the seq number using the index of the list.
    for(int i = 0; i < users.length; i++)
    {
        users[i].SeqNumber = i + 1;
    }
}
// remember indexes start at 0 in C#
users.MoveAndRecalculateSequence(1, 5);