我正在使用VS 2008,在项目的属性页面中,我看到我的目标是.Net 3.5.
这是我在尝试编译时遇到的错误:
AMSDataModels.Vehicle.VIN.get'必须声明一个主体,因为它没有标记为abstract,extern或partial
以下是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AMSDataModels
{
public class Vehicle
{
//NodeID for datastore persistance
public Guid NodeID { get; set; }
public string VIN { get;
set {
if (value.Length != 17) throw new ArgumentOutOfRangeException("VIN", "VIN must be 17 characters");
} }
public string Make { get; set; }
public string Model { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从身体上剥离身体,那么它只是:
public string VIN { get; set; }
Run Code Online (Sandbox Code Playgroud)
一切正常,但我失去了检查VIN的能力.
有没有人建议如何解决这个或更好的方法来解决手头的问题?
我非常喜欢速记符号 - 但验证输入的合法性也很重要!
Bra*_*don 17
如果您要在集合中添加逻辑,则需要将其添加到get中.请注意,在您的设置中,您实际上并未将值设置为任何值?
添加支持字段,
private string _vin;
Run Code Online (Sandbox Code Playgroud)
并在get中返回.
public string VIN
{
get { return _vin; }
set
{
if (value.Length != 17)
throw new ArgumentOutOfRangeException("VIN", "VIN must be 17 characters");
else
_vin = value;
}
}
Run Code Online (Sandbox Code Playgroud)
使用自动属性时,编译器会自动生成一个支持字段.当您声明自己的时候,它无法知道要用于get方法的字段.所以你必须声明两者都没有.
顺便提一下,您当前的set方法只检查值 - 它实际上从未将它分配给任何东西.