小编Joh*_*ers的帖子

返回派生类型时"未实现接口"

以下代码:

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>,因此可以认为我的类将实现该接口.有人可以解释一下这个不编译的理由是什么吗?

我可以看到,有两种可能的解决方案:

  1. 将接口更改为更具体,并要求实现IList.
  2. 更改我的类(MyData)以返回IEnumerable并实现原始接口.

现在假设我也有以下代码:

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)

c#

39
推荐指数
3
解决办法
7000
查看次数

如何在C#中使用类名作为参数

我想要做的是自动创建一些对象.

例如,在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#做类似的事情?

c#

39
推荐指数
4
解决办法
8万
查看次数

WinForms AcceptButton无法正常工作?

好吧,这让我烦恼,我只是想不通有什么问题......

我有两种形式.第一个表单只有一个简单的按钮,它打开另一个作为对话框,如下所示:

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)

c# modal-dialog winforms

38
推荐指数
2
解决办法
3万
查看次数

.NET:AssemblyVersionAttribute中的大型修订号

我们将我们的构建版本化为[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服务器:-)

.net c# svn version-control assemblyversionattribute

38
推荐指数
4
解决办法
2万
查看次数

在C#中处理DBNull

有没有更好/更清洁的方法来做到这一点?

int stockvalue = 0;
if (!Convert.IsDBNull(reader["StockValue"]))
    stockvalue = (int)reader["StockValue"];
Run Code Online (Sandbox Code Playgroud)

c# dbnull datareader

38
推荐指数
6
解决办法
4万
查看次数

根据DropDownList的值动态启用或禁用RequiredFieldValidator

我有一个带有三个文本输入的ASP.NET表单,分别用于"工作电话","家庭电话"和"手机".每个文本输入都有一个与之关联的RequiredFieldValidator.我还有一个DropDownList,用户可以在其中选择首选的手机类型.

我想只需要在DropDownList中选择的字段.例如,如果用户从DropDownList中选择"工作电话",我想禁用"家庭电话"和"手机"的RequiredFieldValidator,从而只需要"工作电话"字段.

我有一个方法,根据DropDownList的值启用和禁用这些验证器,但我无法弄清楚何时调用它.我希望在页面上进行验证之前运行此方法.我该怎么办?

asp.net validation requiredfieldvalidator

38
推荐指数
3
解决办法
7万
查看次数

如何从DataTable获取特定列值?

我有一个数据表.我需要根据用户输入获取某个列值.例如,假设数据表有两列CountryID和CountryName.

我需要根据用户输入的国家/地区名称在数据表中找到CountryID.我可以打开与DB的连接,并从countryName = @userinput的Country运行查询select countryID.无论如何我可以在数据表上执行此操作.

.net c# winforms

38
推荐指数
3
解决办法
30万
查看次数

RegEx的IP地址

我试着用这个源代码提取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)

.net c# regex

38
推荐指数
6
解决办法
6万
查看次数

WCF服务如何向其客户端提升事件?

我想知道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)

wcf

38
推荐指数
3
解决办法
4万
查看次数

XmlSerializer不会序列化IEnumerable

我有一个调用记录器,用于记录所有方法调用以及与使用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# xml-serialization xmlserializer

38
推荐指数
3
解决办法
3万
查看次数