相关疑难解决方法(0)

IEnumerable <object> a = new IEnumerable <object>(); 我可以这样做吗?

我想创建一个对象的新实例 IEnumerable<object>

我可以这样做吗?

IEnumerable<object> a = new IEnumerable<object>();
Run Code Online (Sandbox Code Playgroud)

c#

82
推荐指数
5
解决办法
16万
查看次数

转换为匿名类型

我今天遇到了以下问题,我想知道我的问题是否有解决方案.

我的想法是构建匿名类并将其用作WinForm BindingSource的数据源:

public void Init()
{
    var option1 = new
                  {
                      Id = TemplateAction.Update,
                      Option = "Update the Templates",
                      Description = "Bla bla 1."
                  };

    var option2 = new
                  {
                      Id = TemplateAction.Download,
                      Option = "Download the Templates",
                      Description = "Bla bla 2."
                  };

    var list = new[] {option1, option2}.ToList();

    bsOptions.DataSource = list; // my BindingSource

    // cboTemplates is a ComboBox
    cboTemplates.DataSource = bsOptions; 
    cboTemplates.ValueMember = "Id";
    cboTemplates.DisplayMember = "Option";

    lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
Run Code Online (Sandbox Code Playgroud)

到目前为止工作正常.

我遇到的问题是从BindingSource的"Current"属性中获取Id,因为我无法将其强制转换为匿名类型:

private void cmdOK_Click(object …
Run Code Online (Sandbox Code Playgroud)

c# anonymous-types anonymous-class

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

在匿名类中实现两个接口

我有两个接口:

interface A {
    void foo();
}

interface B {
    void bar();
}
Run Code Online (Sandbox Code Playgroud)

我能够创建实现这些接口之一的类的匿名实例,如下所示:

new A() {
    void foo() {}
}
Run Code Online (Sandbox Code Playgroud)

要么:

new B() {
    void bar() {}
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个实现两个接口的匿名类.像(虚构的):

new A implements B {
    void foo() {}
    void bar() {}
}
Run Code Online (Sandbox Code Playgroud)

这显然会产生编译错误:"B无法解析为类型".

解决方法很简单:

class Aggregate implements A, B {
    void foo() {}
    void bar() {}
}
Run Code Online (Sandbox Code Playgroud)

然后Aggregate,我会使用匿名类.

我想知道一个匿名类实现两个接口是否合法.

java android

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

接口 - 在C#中实现匿名类?

在C#中是否有一个构造允许您创建一个实现接口的匿名类,就像在Java中一样?

c# anonymous-class

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

C#匿名实现接口(或抽象类)

在Java中,可以使用可以动态实现的匿名类扩展接口.例:

Runnable myRunnable = new Runnable()
{
    @Override
    public void run() { /**/ }
}
Run Code Online (Sandbox Code Playgroud)

(更多信息:http://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html#ixzz1k07mVIeO)

这可能在C#中吗?如果没有,什么是可行的替代方案,而不必依赖于实现过多的子类?

c# anonymous-types

19
推荐指数
2
解决办法
9605
查看次数

相当于C#中Java的匿名类?

我试图将用java编写的SDK移植到C#.

在这个软件中有许多"处理程序"接口,有几种方法(例如:attemptSomethingHandlersuccess()几种不同的故障方法).然后在调用类中匿名实现和实例化该接口,并将其传递给类的attemptSomething方法SomethingModel.这是一个异步方法,有几个地方可能会失败或调用另一个方法(传递处理程序).这样,匿名实现attemptSomethingHandler可以在调用的类中引用私有方法attemptSomething.

在C#中,不可能匿名实现接口.我可以显式地实现一个新类,但是这个实现对于这个调用类来说是唯一的,而不是用于其他任何东西.更重要的是,我无法访问调用类中的私有方法,这是我需要的,也不想公开.

基本上,我需要根据SomethingModel类方法中发生的事情从调用类中运行不同的代码.

我一直在阅读代理,但这需要传递尽可能多的委托,因为处理程序界面中有方法(据我所知).在C#中执行此操作的适当方法是什么?我觉得我错过了一个非常常见的编程策略.必须有一种简单,干净的方式来构建和解决这个问题.

c# java

17
推荐指数
2
解决办法
1万
查看次数

匿名类实现接口

我在方法中有以下代码:

 var list = new[]
  {
   new { Name = "Red", IsSelected = true },
   new { Name = "Green", IsSelected = false },
   new { Name = "Blue", IsSelected = false },
  };
Run Code Online (Sandbox Code Playgroud)

我想调用一个函数,它需要一个元素列表,每个元素实现一个接口(ISelectable).我知道如何使用普通类完成此操作,但在这种情况下,我只是尝试填写一些演示数据.

是否可以创建实现接口的匿名类?

像这样:

new { Name = "Red", IsSelected = true } : ISelectable
Run Code Online (Sandbox Code Playgroud)

c# interface anonymous-class

14
推荐指数
2
解决办法
4890
查看次数

为什么不在.NET中允许就地接口实现?

要么我缺少某些东西,要么.NET不支持Java的功能.我希望能够避免创建一个小类只是为了实现一个小接口.例如,LINQ的Except方法需要IEqualityComparer.所以我不得不写一个实现接口的小类.但是在Java中我可以简单地new IEqualityComparer() { //interface declarations }完成它并完成它.所以有什么问题?

这与这篇文章有些相关:

C#匿名类可以实现一个接口吗?.

附加:此刻,我为Equals和添加了覆盖GetHashCode.

.net c# anonymous interface in-place

13
推荐指数
1
解决办法
2575
查看次数

c#当需要接口时是否可以提供lambda?

在一些类方法中,A,我需要调用一个库方法B,它IProgress<Object>作为一个参数.

通常,我可以实现IProgress<Object>作为A所在的类的一部分,然后将"this"传递给方法B.或者我可能创建一个新类,其唯一目的是IProgress<Object>正确实现和处理它 - 然后在这种情况下我' d创建该类的实例并将其传递给B.

但我真正想要的是让我的实现IProgress<Object>出现在我调用B的方法中,这样调用代码和IProgress<Object>实现之间的视觉断开就更少了.(我认为我对IProgress的实现是一种私有的,非共享的调用方法细节,因此我不希望我的实现IProgress<Object>在一个完全独立的方法中,也许是整个其他类).

我一直在尝试做的是使用一个lambda,我将在其中定义我的简短进度处理,然后以某种方式将这个lambda传递给B,如下所示:

method in class A {
...
Action<Object> Report = (m) => { // do something useful with m };

B(Report)
}

method B(IProgress<Object> reporter) {
   reporter.Report(some object)
}
Run Code Online (Sandbox Code Playgroud)

当然,我知道为什么这不会按原样运行--B想要一个实现的对象,IProgress<Object>而是将它交给一个Action对象.

有没有办法实现我想要实现的目标?(IE有我的实现,如果IProgress<Object>出现在方法A中?

c# lambda interface

13
推荐指数
1
解决办法
8935
查看次数

基于Interface的匿名类型

我可以用类似的方式创建接口的匿名实现

delegate() { // type impl here , but not implementing any interface}
Run Code Online (Sandbox Code Playgroud)

有点像的东西

new IInterface() { // interface methods impl here }
Run Code Online (Sandbox Code Playgroud)

我认为它们有用的情况是指定作为接口类型的方法参数,并且创建类类型的代码太多.

例如,考虑这样:

    public void RunTest()
    {
        Cleanup(delegate() { return "hello from anonymous type"; });
    }

    private void Cleanup(GetString obj)
    {
        Console.WriteLine("str from delegate " + obj());
    }

    delegate string GetString();
Run Code Online (Sandbox Code Playgroud)

如果在上面的代码中,清理方法将接口作为参数,而不编写类定义,将如何实现?(我认为Java允许表达式像新的Interface()...)

c#

5
推荐指数
2
解决办法
907
查看次数

C#等效于创建实现接口的匿名类

我最近开始使用C#,并且我想找到与此等效的方法。我不知道这叫什么,所以我将简单地通过代码向您展示。

使用Java,我能够创建如下接口:

public interface Event {
    public void execute();
}
Run Code Online (Sandbox Code Playgroud)

并在方法的参数中传递此接口,如下所示:

public class TestEvent {
    ArrayList<Event> eventList = new ArrayList<Event>();

    public void addEvent(Event event){
        eventList.add(event);
    }

    public void simulateEvent(){
        addEvent(new Event() {
            public void execute(){
                //functionality
            }
        } );
    }

    public void processEvents(){
        for(Event event : eventList)
            eventList.execute();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我的问题是关于类中的simulatEvent方法的TestEvent,如果使用C#可以进行这样的操作。

我想知道是否有一种方法可以使用C#执行类似的操作(实例化simulateEvent方法中的接口),以及这实际上是什么。谢谢!

c# java interface anonymous-class

5
推荐指数
1
解决办法
1344
查看次数

创建实现接口的匿名类

我想知道是否有一些内联短方法来创建实现接口的类。就像有匿名方法但有实现接口一样。

问题是:

interface iSomeInterface
{
  void DoIt();
}

public void myMethod(iSomeInterface param)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

我想这样使用它:

object.myMethod(new { override DoIt() { Console.WriteLine("yay"); } } : iSomeInterface);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

抱歉,以防重复。

c#

2
推荐指数
1
解决办法
6908
查看次数

将具有相同属性的匿名类型转换为接口

我正在尝试将具有相同属性的匿名类型强制转换为接口,但出现错误:

无法将类型为“ <> f__AnonymousType104`1 [System.Int32]”的对象强制转换为类型为“ IHasFiles”的对象。

 public interface IHasFiles
 {
    int FileMasterId { get; }
 }

 var entity = new { FileMasterId = fileMasterId }.CastOrDefault<IHasFiles>();
 // This is the line where I get the error
Run Code Online (Sandbox Code Playgroud)

c# anonymous-types

0
推荐指数
1
解决办法
1189
查看次数