这个最可能的简单问题我遇到了很多麻烦。 我有一个具有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'。我理解,但我仍然需要这种方法是静态的。 我希望有人可以帮助我完成我的项目:)
提前致谢!
答案 0 :(得分:1)
您需要存储已创建的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);
}
要创建Movie实例,您可以在创建时或在Movie构造函数上将其添加到movies
列表。
答案 1 :(得分:0)
嗯,从逻辑上讲,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);
}
}
基本上你可以从电影列表中找到这部电影。目前在你的方法中你没有什么比较它,你只需要传递给方法的字符串。