以下代码:
public interface ISomeData
{
IEnumerable<string> Data { get; }
}
public class MyData : ISomeData
{
private List<string> m_MyData = new List<string>();
public List<string> Data { get { return m_MyData; } }
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
错误CS0738:'InheritanceTest.MyData'未实现接口成员'InheritanceTest.ISomeData.Data'.'InheritanceTest.MyData.Data'无法实现'InheritanceTest.ISomeData.Data',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerable'.
由于List <T>实现了IEnumerable <T>,因此可以认为我的类将实现该接口.有人可以解释一下这个不编译的理由是什么吗?
我可以看到,有两种可能的解决方案:
现在假设我也有以下代码:
public class ConsumerA
{
static void IterateOverCollection(ISomeData data)
{
foreach (string prop in data.MyData)
{
/*do stuff*/
}
}
}
public class ConsumerB
{
static void RandomAccess(MyData data)
{
data.Data[1] = "this line is invalid if MyPropList …Run Code Online (Sandbox Code Playgroud) 我想要做的是自动创建一些对象.
例如,在Java中,类可以作为参数传递
Class A{
}
Object createObjectBy(class clazz){
// .. do construction work here
}
when using it, just ---> createObjectBy(A.class)
Run Code Online (Sandbox Code Playgroud)
这对很多事情都有好处.
所以,我怎么能在C#做类似的事情?
好吧,这让我烦恼,我只是想不通有什么问题......
我有两种形式.第一个表单只有一个简单的按钮,它打开另一个作为对话框,如下所示:
using (Form2 f = new Form2())
{
if (f.ShowDialog() != DialogResult.OK)
MessageBox.Show("Not OK");
else
MessageBox.Show("OK");
}
Run Code Online (Sandbox Code Playgroud)
第二个就是它Form2,上面有两个按钮.我所做的就是将表单AcceptButton设置为一个,将CancelButton设置为另一个.在我的脑海中,这是完成这项工作所需要的一切.但是当我运行它时,我点击打开Form2的按钮.我现在可以单击一个设置为CancelButton,然后我收到"Not OK"消息框.但当我点击一套作为AcceptButton时,没有任何反应?Form2的InitializeComponent代码如下所示:
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(211, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// button2
//
this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button2.Location = new System.Drawing.Point(130, 13);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, …Run Code Online (Sandbox Code Playgroud) 我们将我们的构建版本化为[major].[minor].[micro].[revision],例如2.1.2.33546.
我们的构建脚本自动更新包含的AssemblyInfo.cs文件
[assembly: AssemblyVersion("x.y.z.w")]
Run Code Online (Sandbox Code Playgroud)
为了在程序集中嵌入版本号.
但我们的Subversion-repository刚刚达到修订版#65535,这打破了我们的构建.
事实证明,版本号中的每个数字的最大值为65534(可能是由于Windows限制).
你遇到过这个问题吗?有什么好的解决方案/解决方法吗?
我们喜欢嵌入修订号的方案,我们显然不能只重置我们的Subversion服务器:-)
有没有更好/更清洁的方法来做到这一点?
int stockvalue = 0;
if (!Convert.IsDBNull(reader["StockValue"]))
stockvalue = (int)reader["StockValue"];
Run Code Online (Sandbox Code Playgroud) 我有一个带有三个文本输入的ASP.NET表单,分别用于"工作电话","家庭电话"和"手机".每个文本输入都有一个与之关联的RequiredFieldValidator.我还有一个DropDownList,用户可以在其中选择首选的手机类型.
我想只需要在DropDownList中选择的字段.例如,如果用户从DropDownList中选择"工作电话",我想禁用"家庭电话"和"手机"的RequiredFieldValidator,从而只需要"工作电话"字段.
我有一个方法,根据DropDownList的值启用和禁用这些验证器,但我无法弄清楚何时调用它.我希望在页面上进行验证之前运行此方法.我该怎么办?
我有一个数据表.我需要根据用户输入获取某个列值.例如,假设数据表有两列CountryID和CountryName.
我需要根据用户输入的国家/地区名称在数据表中找到CountryID.我可以打开与DB的连接,并从countryName = @userinput的Country运行查询select countryID.无论如何我可以在数据表上执行此操作.
我试着用这个源代码提取wan_ip的值(IP地址):怎么回事?!我确定RegEx模式是正确的.
String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"[\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
string[] result = ip.Split(input);
foreach (string bla in result)
{
Console.WriteLine(bla);
}
Console.Read();
Run Code Online (Sandbox Code Playgroud) 我想知道WCF中是否有事件处理方式.我遇到了WCF中的Callbacks,但我想在WCF中进行事件处理.
我的要求就像我想向特定客户端发送事件而不是使用WCF中的事件处理向所有客户端发送事件,我也想维护会话.
我在WCF中看到了处理回调的发布者/订阅者模型,但是这个模型发布给所有订阅但我想只发布到选定客户端的客户.
我认为可以使用WCF中的事件来完成.
客户端 :
public class Callbacks : IServiceCallback
{
public void CallToMyClient(string name)
{
this.CallToMyClient(name);
}
}
protected void Page_Load(object sender, EventArgs e)
{
Callbacks callback = new Callbacks();
ServiceClient client = new ServiceClient(new InstanceContext(callback));
client.SubscribeClient();
client.DoSomeWork();
}
Run Code Online (Sandbox Code Playgroud) 我有一个调用记录器,用于记录所有方法调用以及与使用XmlSerializer的方法相关的参数.它适用于大多数调用,但它会为具有IEnumerable类型参数的所有方法抛出异常.
例如,void MethodWithPlace( Place value )将序列化,但void MethodWithPlace( IEnumerable<Place> value )不会.
例外是
System.NotSupportedException:无法序列化接口System.Collections.Generic.IEnumerable`1 [[Place,Test,Version = 0.0.0.0,Culture = neutral]].
我应该怎么做才能使用这些方法IEnumerable作为其参数之一?
c# ×8
.net ×3
winforms ×2
asp.net ×1
datareader ×1
dbnull ×1
modal-dialog ×1
regex ×1
svn ×1
validation ×1
wcf ×1