2013-01-22 43 views
0

我有一个名为movie的类。 Movie有一个movieYear字符串属性和movieYearInt int属性。我想要一个类方法,我可以发送电影对象并获取已取得movieYear字符串属性并将其值复制到movieYearInt的对象。稍后我将转换对象的更多属性。在班级方法中创建并返回对象的副本

这是电影类

public class movie 
{ 
    public string movieName { get; set; } 
    public string movieYear { get; set; } 
    public int movieYearInt { get; set; } 

    public movie convertFilm(movie m) 
    { 
     m.movieYearInt = int.Parse(m.movieYear); 
     return m; 
    } 
} 

,这是我想在我的形式获取对象

movie m = new movie(); 
m.movieYear = cmbMovieYear.ToString(); 
movie newMovie = m.convertFilm(m); 

我得到的错误是:输入字符串的不正确的格式 我做错了什么?

编辑 - 这是movieYear组合框

List<int> allYears = new List<int>(); 
allYears.AddRange(Enumerable.Range(1900, 113)); 
cmbMovieYear.DataSource = allYears; 

编辑 -

m.movieYear = cmbMovieYear.SelectedItem.ToString(); 

这是溶液。

+3

是什么'cmbMovieYear.ToString()'的价值? –

+0

通过convertFilm步骤并检查m.movi​​eYear的值。您可能有空间或解析器不喜欢的东西。 –

+0

请提供一个movieYear输入内容的例子。如果它是点或其他东西,那么int.Parse将会失败。如果你想复制现有的电影,那么从IClo​​neable继承你的课 – Tomtom

回答

0

而不是返回转换的对象,你有没有考虑修改你的movieYearInt属性的getter到这样的东西?

public int movieYearInt 
    { 
    get 
    { 
     // add some validation, and consider using System.Int32.TryParse 
     return System.Int32.Parse(movieYear); 
    }  
    } 
+0

虽然很好的建议,这实际上并没有回答他为什么他的崩溃正在发生的问题:) –

0
public class movie: ICloneable 
{ 
    public string movieName { get; set; } 
    public string movieYear { get; set; } 
    public int movieYearInt { get { return int.Parse(movieYear) set {movieYear = value.ToString()}} 

    public object Clone() 
    { 
     return new movie() {movieName = this.movieName, movieYear = this.movieYear}; 
    } 
} 

var m = new movie(); 
m.movieYear = "2001"; 
var newMovie = (movie) m.Clone(); 
+0

可能想检查你的语法。你错过了一个}。 但是,是的,通常如果你想复制一些东西,使用ICloneable接口。但值得指出的是,某些类型的变量(如对象和数组)是“参考”对象,并且指向内存中的一个点,而不是对象本身。克隆一个对象时,这些引用将被传送,而不是该对象的副本,因此请确保在必要时递归调用“克隆”。 – Hoeloe

+0

1)int.Parse可以替换为int.TryParse 2)抱歉,我输入的代码没有检查... –

+0

尽管TryParse不一定是所需的行为。它取决于程序的上下文。 – Hoeloe