如何在C#中创建包含Ints和字符串的二维数组?

时间:2015-11-27 22:30:34

标签: c# arrays

我试图在C#中创建一个ATM模拟器,我有点坚持使用登录。我使用了一个名为User的类,我定义如下:

public class User
    {
        public string userName { get; set; }
        public string password { get; set; }
        public int savingsAcct { get; set; }
        public int checkAcct { get; set; }
    }

我已经创建了我班级的三个实例来代表我将要使用的三个帐户。所以我想知道如何制作一个接受字符串和整数的二维数组。

我想我可以使用二维数组作为日志,因为我可以使用for循环来遍历数组并检查每个帐户的用户名和密码以查看它们是否匹配。我知道我可以使用数据库或其他东西,但我对C#还是比较新的,所以我不寻找有效的东西,我只是在寻找有用的东西。任何帮助将非常感激。

5 个答案:

答案 0 :(得分:2)

您应该学习一些使用数据库的基础知识。您的User课程称为模型,您正在寻找的是集合。

首先,我建议添加id字段,以便更容易识别每个对象(尽管它是可选的):

public class User
{
    public int id { get; set; }
    public string userName { get; set; }
    public string password { get; set; }
    public int savingsAcct { get; set; }
    public int checkAcct { get; set; }
}

您可以使用List<User>

List<User> users = new List<User>()
{
   new User() { id = 0, userName = "Alex", etc... }
   new User() { id = 1, userName = "Joshua", etc... }
   new User() { id = 2, userName = "Phil", etc... }
};

要查找具有特定用户名的用户,您必须在此处使用LINQ:

//                returns null if no such user is found
User alex = users.FirstOrDefault(u => u.userName == "Alex");

有时候使用Dictionary<TKey, TValue>List<T>更适合

Dictionary<string, User> users = new Dictionary<string, User>()
{
   { "Alex", new User() { id = 0, userName = "Alex", etc... } },
   { "Joshua", new User() { id = 1, userName = "Joshua", etc... } },
   { "Phil", new User() { id = 2, userName = "Phil", etc... } },
};

然后,您可以在索引器的帮助下通过其userName访问用户:

User alex = users["Alex"];

答案 1 :(得分:1)

这显示了一个工作示例,但需要按摩到您的代码中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class User
    {
        public string userName { get; set; }
        public string password { get; set; }
        public int savingsAcct { get; set; }
        public int checkAcct { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // here you'll take the user and password from the form
            string userNameEnteredIntoScreen = "???";
            string passwordEnteredIntoScreen = "???";

            // build list of valid users (amend to suit)
            var users = new List<User>();
            users.Add(new User
            {
                userName = "user1",
                password = "abc",
                savingsAcct = 1,
                checkAcct = 2,
            });
            users.Add(new User
            {
                userName = "user2",
                password = "xyz",
                savingsAcct = 3,
                checkAcct = 4,
            });

            // then to check if they're valid
            var user = users.SingleOrDefault(u =>
                u.userName == userNameEnteredIntoScreen &&
                u.password == passwordEnteredIntoScreen
                );

            if (user != null)
            {
                // the user and password was valid, and 'user' variable
                // now contains the details of the user
            }
        }
    }
}

答案 2 :(得分:0)

正如评论中所阐明的那样,您正在寻找一个可以在您的应用程序中存储User个对象的集合。

如果您需要能够更改集合的内容,List<T>是一个不错的选择 - 它没有固定的大小,因此很容易添加和删除对象。

List<User> _allUsers = new List<User>();
_allUsers.Add(/* user object */); //populate the list with Users using .Add()

foreach (var user in _allUsers)
{
    if(user.userName == someInputVariable && user.passWord == someOtherInputVariable)
    {
        ...
    }
}

MSDN documentation for List<T>

您还可以使用User的一维数组,但我认为List<T>对您正在尝试的内容更有意义,并且很容易与某人合作刚开始学习这门语言。

答案 3 :(得分:0)

当您希望存储User个对象时,请将它们保留为该格式,而不是试图将它们压缩成某种字符串/ int组合。所以让我们来看看你有3个用户对象:

var bob = new User { userName = "Bob" };
var alice = new User { userName = "Alice" };
var marvin = new User { userName = "Marvin" };

我们将它们放入List<>

var users = new List<User> { bob, alice, marvin };

现在你可以随意循环播放它:

foreach(var user in users)
{
    Console.WriteLine(user.userName);
}

如果你想找到一个特定的项目,你可以快速得到它:

var user = users.SingleOrDefault(u => u.userName = "Bob");
if (user != null)
{
    //We found a user called Bob
}

甚至专门检查用户名和密码:

var userIsValid = users.Any(u => u.userName = "Bob" && u.password = "secret");

答案 4 :(得分:-1)

在C#中,您不能创建具有两种不同数据类型的二维数组,在您的情况下,int和string。您只能创建相同数据类型的二维数组。

如果您需要一个数据结构来容纳两种数据类型,则可以使用字典对。

//e.g.
Dictionary<int, string> data = new Dictionary<int, string>
{ 
   {1, "value 1"},
   {2, "value 2"},
   {3, "value 3"}
};


//With your POCO can create a Dictionary as below
Dictionary<int, User> data = new Dictionary<int, User>
{ 
   {1, new User{ userName = "username1", password = "password1", savingsAcct  = 1,checkAcct = 1 }},
   {2, new User{ userName = "username2", password = "password2", savingsAcct  = 1,checkAcct = 2 }},
   {3, new User{ userName = "username3", password = "password3", savingsAcct  = 1,checkAcct = 3}}
};

您可以使用循环来初始化词典