C# 在c语言中从列表调用

C# 在c语言中从列表调用,c#,list,C#,List,我试图向用户展示他们选择的电影,但是,我不知道如何从列表中调用它 public class Program { static void Main(string[] args) { var movieList = new List<Movies>(); //List of movies movieList.Add ( new Movies { movieName = "Back to th

我试图向用户展示他们选择的电影,但是,我不知道如何从列表中调用它

public class Program
{
    static void Main(string[] args)
    {
        var movieList = new List<Movies>();

        //List of movies        
        movieList.Add ( new Movies {
        movieName = "Back to the Future",
        duration = 116});

        //Display all movies in list
        int i = 0;
        foreach (var Movie in movieList)
        {
            Console.WriteLine("{0}) Name: {1} | Duration: {2} mins",i, Movie.movieName, Movie.duration);
            i++;
        }

        //Selection of movie
        Console.Write("Please select a movie: ");
        var userMovieSelection = Console.ReadKey().KeyChar;

        Console.WriteLine("You've selected: {0} | {1} mins", [I'm having an issue here]

        Console.ReadKey(true);   
    }
}

public class Movies
{
    public string movieName {get; set;}
    public int duration {get; set;}
}
我尝试过movielist.movieName[userMovieSelection]之类的东西,但不断出现错误,比如没有定义

char userMovieSelection = Console.ReadKey().KeyChar;
int movieIndex = userMovieSelection - '0';

使用movieIndex访问您的列表。当你是新手的时候,放松一下

KeyChar将是一个字符或字符串

try something like
int passed_index = 0;
string user_input =  Console.Read(); // Console.ReadKey().KeyChar
if (int.TryParse(user_input , out passed_index)) {
   if (passed_index < movieList.Count) {
     ; do stuff
   } else {
     ; let user know no items are there
   }
} else {
   ; ask user to input a number
 }

您可以使用以下选项:

        var isNumber = int.TryParse(Console.ReadLine(), out var value);
        if (isNumber && value >= 0 && value < movieList.Count)
        {
            var userMovieSelection = Convert.ToInt32(value);
            var selectedMovie = movieList[userMovieSelection];
            Console.WriteLine("You've selected: {0} | {1} mins", selectedMovie.movieName, selectedMovie.duration);
        }
这将从列表中选择所选电影。完整代码如下

更新1-包括检查用户输入的有效号码

更新2-包括检查用户是否输入现有电影编号

public class Program
{
    static void Main(string[] args)
    {
        // You can initialise movie list
        var movieList = new List<Movie>
        {
            new Movie
            {
                movieName = "Back to the Future",
                duration = 116
            }
        };

        //Display all movies in list
        int i = 0;
        foreach (var movie in movieList)
        {
            Console.WriteLine("({0}) Name: {1} | Duration: {2} mins", i, movie.movieName, movie.duration);
            i++;
        }

        //Selection of movie
        Console.Write("Please select a movie: ");

        var isNumber = int.TryParse(Console.ReadLine(), out var value);
        if (isNumber && value >= 0 && value < movieList.Count)
        {
            var userMovieSelection = Convert.ToInt32(value);
            var selectedMovie = movieList[userMovieSelection];
            Console.WriteLine("You've selected: {0} | {1} mins", selectedMovie.movieName, selectedMovie.duration);
        }
        else
        {
            Console.WriteLine("Incorrect value entered");
        }
        Console.ReadKey(true);
    }
}
关于代码的一些注释:

我将电影类名重命名为Movie,因为它只显示一部电影 在foreach循环中,需要调用movie变量,而不是movie类来获取名称和持续时间 要读取用户号码输入,最好使用Console.ReadLine
你选择了:{0}{1}分钟

表示无任何内容,{0}和{1}不存在。如果它们不在foreach中,则需要调用数组索引来调用列表,下面是正确执行此操作的代码:

ConsoleKeyInfo userMovieSelection = Console.ReadKey();

int userChoice = 0;

if (Int32.TryParse(userMovieSelection.KeyChar.ToString(), out userChoice))
{
    Console.WriteLine("You've selected: " + movieList[userChoice].movieName + " | " + movieList[userChoice].duration + " mins");
}

因为您使用了Movie作为类名,所以应该在movieList中为每个var Movie使用不同的变量名以避免混淆。@jasen虽然类名是Movies…var userMovieSelection=Console.ReadKey.KeyChar;他们到底应该选择什么?什么是用户电影选举?这是电影类中的某种id属性吗?@Jasen:不,类名是Movies,但应该是Movie。问题是缺少与此版本相关的确切错误。在控制台上按1将返回49 console.ReadKey.KeyChar要获取编写电影的索引,需要var userMovieSelection=console.ReadKey.KeyChar-“0”;加1这是修复OP代码的唯一答案,适用于大于9的整数永远不要将用户键入的假定数字直接传递到Convert.ToInt32。如果用户没有键入数字,会发生什么情况?如果用户键入的数字大于列表中的电影数量,会发生什么情况?@johnny5 BTW:OP prints:用于第11部电影。所以期待一个输入:没有错。现在好多了。只是您不需要在if@L.B是的,你可以在第11部电影中打印“:”,但是在第191部电影中会用到什么呢?太多人的答案都集中在一个不了解核心问题的人向我们描述的问题上,值得注意的是,最好是用readline而不是charYep!非常感谢。我得等几分钟才能接受你的回答。