C#-如何编写一个返回Movie对象的静态函数
本文关键字:Movie 返回 对象 静态函数 一个 何编写 C#- | 更新日期: 2023-09-27 18:00:04
这个很可能很简单的问题我遇到了很多麻烦。我有一个电影类,它有一个name属性。我想创建一个静态函数,返回具有该名称的电影实例。
这是我迄今为止的代码:
public static Movie getMovieByName(string name)
{
if(this.name == name)
{
return this;
}
else
{
throw new InvalidMovieException(name);
}
}
class InvalidMovieException : System.Exception
{
public InvalidMovieException(string value) : base(String.Format("This movie doesn't exist! Value: {0}", value)) { }
}
我遇到一个错误,无法在静态方法中使用关键字"this"。我理解这一点,但我仍然需要这种方法保持静态。我希望有人能帮助我的项目:)
提前感谢!
您需要存储创建的Movie实例,然后对它们进行迭代。你可以这样做:
public static List movies;
public static Movie getMovieByName(string name)
{
foreach(Movie m in movies)
{
if(m.name == name)
return m;
}
throw new InvalidMovieException(name);
}
若要创建"影片"实例,可以在创建时或在"影片"构造函数中将其添加到movies
列表中。
从逻辑上讲,this
在static
成员中指的是什么?考虑如何调用此成员:
Movie.getMovieByName("Highlander")
this
会是什么?您不是在Movie
实例的上下文中操作的,因此没有this
。
那么,你实际上在试图返回什么呢?如果要将字符串值与Movie
对象的名称进行比较,则需要获取Movie
对象的名称。
举个例子,假设您在某个地方有一些Movie
的数据库存储库。你可能有这样的结构:
public static Movie getMovieByName(string name)
{
var movie = MovieRepository.Movies.SingleOrDefault(m => m.name == name);
if(movie != null)
{
return movie;
}
else
{
throw new InvalidMovieException(name);
}
}
基本上,你会从电影列表中找到这部电影。目前,在你的方法中,你没有什么可以比较的,你只有传递给该方法的字符串。