相关疑难解决方法(0)

是否可以在C#中实现mixins?

我听说有可能使用扩展方法,但我自己也无法弄明白.如果可能的话,我想看一个具体的例子.

谢谢!

c# extension-methods mixins

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

是否应将扩展属性添加到C#4.0?

我希望这能用于流畅的界面.见,例如这个 Channel9的讨论.可能还需要添加索引属性.

你的想法是什么?优势会超过"语言混乱"吗?

c#

17
推荐指数
3
解决办法
6037
查看次数

C#通过添加属性来扩展类

在C#中是否可以扩展一个类,而不仅仅是添加函数而是属性.例如:我有一个我依赖的标准DLL库,供应商不想修改它.

在整个代码中我已经广泛使用了DataCell类,现在才意识到我需要为它添加一个额外的属性,因为创建一个继承自这个类的新扩展类看起来不会起作用+大量的重写.

DataCell [元数据]

public class DataCell : Message
{
public int Field1;
public int Field2;
public DataCell()
{
 ..
} 
..
}
Run Code Online (Sandbox Code Playgroud)

基本上我想添加一个public int Flags; 到这堂课.所以我现在可以做而不重写任何东西,(新的DataCell).Flags = 0x10;

c# oop

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

如何使用额外属性扩展类

假设我有一个名为的类Foo.

我无法更改Foo类,但我不想使用名为Bartype 的属性来扩展它string.

此外,我还有更多类,Foo所以我对"通用"解决方案感兴趣.

我正在调查ExpandoObject,dynamic它给了我我要求的结果,但我想知道它可以在不使用的情况下完成dynamic......

static void Main(string[] args)
{
    var foo = new Foo() { Thing = "this" };
    var fooplus = Merge(foo, new { Bar = " and that" });
    Console.Write(string.Concat(fooplus.Thing, fooplus.Bar));
    Console.ReadKey();
}

public class Foo
{
    public string Thing { get; set; }
}

public static dynamic Merge(object item1, object item2)
{
    if (item1 == null || item2 == null) …
Run Code Online (Sandbox Code Playgroud)

c# reflection dynamic

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

ASP.NET MVC/C#:我可以避免在单行C#条件语句中重复自己吗?

在视图中的表中显示Customer的邮件地址时,请考虑以下代码:

<%: Customer.MailingAddress == null ? "" : Customer.MailingAddress.City %>
Run Code Online (Sandbox Code Playgroud)

我发现自己使用了相当数量的这些三元条件语句,我想知道是否有一种方法可以在条件中引用回被评估的对象,以便我可以在表达式中使用它.也许是这样的事情:

<%: Customer.MailingAddress == null ? "" : {0}.City %>
Run Code Online (Sandbox Code Playgroud)

这样的事情存在吗?我知道我可以创建一个变量来保存值,但是将所有内容保存在视图页面中的一个紧凑的小语句中会很好.

谢谢!

c# asp.net-mvc

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

C#如何创建没有括号的扩展

我有一个关于C#的奇怪问题.

我有一个静态类来存储方法作为扩展.然后,我有以下扩展名:

public static bool fwHasData(this DataTable table)
{
    return (table == null || table.Rows.Count == 0) ? true : false;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:当我尝试在我的代码中使用扩展时,存在一些避免使用括号的方法吗?

用法:

bool vHasData = MyDataTable.fwHasData(); // Works fine!
Run Code Online (Sandbox Code Playgroud)

预期用途:

bool vHasData = MyDataTable.fwHasData; // Removing the parentheses
Run Code Online (Sandbox Code Playgroud)

非常感谢!

c# extension-methods

4
推荐指数
1
解决办法
645
查看次数

Model.Is ___ - 它应该是属性还是方法?

当我为域设计模型时,它们几乎总是.IsSomething在它们上面有一些功能. IsNew并且IsDirty对于数据持久性目的而言是常见的,IsValid对于业务规则验证,甚至IsFraudulent在当前项目中(更多业务规则验证)等.每当我看到其他人实现这些时,它们几乎总是作为方法完成.但我发现自己想知道是否有特殊原因.

我倾向于将属性描述为描述对象和方法以执行某种操作.这些并不是真正的行动.它们涉及代码,因为它们在被调用时是动态确定的,并且它们显然是只读的,但对我来说它们仍然适合作为属性而不是方法.

我想,可能存在属性的序列化问题.虽然丰富的域模型往往不能很好地序列化,因为它包含逻辑和功能,所以每当我需要在服务边界上移动某些东西时,我通常首先将它扁平化为定义的DTO结构.

但我想知道其他人是否对这个问题有任何见解?是否有充分的理由将这些实现为方法而不是属性?

(切向相关,虽然已经给出了答案,但扩展属性确实有助于在这样的事情上保持一致.我有许多IsSomething()扩展方法,通常System.String用于实现特定于域的逻辑.但即使属性是通过go,我可能想坚持使用方法只是为了与扩展保持一致.)

c# domain-model

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

使用.NET是否可以将自定义属性分配给内置对象,如FileSystemWatcher?

是否可以将自定义属性添加到作为.NET框架一部分的对象?

我知道如果我只是给一个类我写了一个属性我会怎么做,但是如何在FileSystemWatcher类中添加一个自定义属性呢?

我在想要从XML文件中观看的路径中加载,但是也想添加一个属性来存储更多信息,在这种情况下是配置文件的位置.我可以将此属性添加到FileSystemWatcher类本身吗?

.net c# filesystems windows-services

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

扩展C#List.Last

Lists的.Last()方法仅返回一个值.我希望能够做到这样的事情.

  List<int> a = new List<int> { 1, 2, 3 };
  a.Last() = 4;
Run Code Online (Sandbox Code Playgroud)

这是我尝试编写扩展方法(它不编译)

public unsafe static T* mylast<T>(this List<T> a)
{
   return &a[a.Count - 1];
}
Run Code Online (Sandbox Code Playgroud)

我想做什么?

编辑:

这是我想要使用它的一个例子.

 shapes.last.links.last.points.last = cursor;   //what I want the code to look like
 //how I had to write it.
 shapes[shapes.Count - 1].links[shapes[shapes.Count - 1].links.Count - 1].points[shapes[shapes.Count - 1].links[shapes[shapes.Count - 1].links.Count - 1].points.Count-1] = cursor;
Run Code Online (Sandbox Code Playgroud)

这就是做的原因

shapes[shapes.Count-1] 
Run Code Online (Sandbox Code Playgroud)

不是一个真正的解决方案.

c# extension-methods arraylist

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

错误CS1109扩展方法必须在顶级静态类中定义; Patterns是一个嵌套类

我想扩展字符串对象并将这些扩展作为嵌套类的一部分,但是直接这样做:

public static class StringExtensions
{
    public static class Patterns
    {
        public static string NumbersOnly(this string s)
        {
            return new String(s.Where(Char.IsDigit).ToArray());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...给出了这篇文章标题所述的错误.

我怎么能以不同的方式写这个,这样当我调用它时,可以像这样调用它:

string s = "abcd1234";
s = s.Patterns.NumbersOnly();
Run Code Online (Sandbox Code Playgroud)

我知道我可以NumbersOnly作为直接的孩子移动StringExtensions以使错误消失,但我的意图是将方法组织成具有许多方法的类别.在这个例子中,NumbersOnly只是我打算在那里进行的大约40个模式匹配中的一个,我不希望用以下方法混淆对象的根; PatternNumbersOnly或者NumbersOnly等等.

注意:这个问题是不是这样的问题不同的这一个,因为我没有问为什么这个问题的存在,我要寻找一个解决办法,这样我可以有此错误的原因是否认我的功能或类似的功能.

c# c#-6.0

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

找不到扩展方法

我具有用于与在一个单独的扩展方法控制台应用程序的单个模块Extensions命名空间和类,在称为DataProcessorusing Extensions;,有效如下与外来代码移除:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataProcessor
{
    using Extensions;
    class Program
    {
        public static int Main(string[] Args)
        {
              for (int CtrA = 0; CtrA <= 100; CtrA++)
              {
                    System.Diagnostics.Debug.Print((CtrA + 1).Ordinal);     // Error occurs here
              }
        }
    }
}

namespace Extensions
{
    public static class Extensions
    {
        public static string Ordinal(int Number)
        {
            string Str = Number.ToString();
            Number = Number % 100;
            if ((Number >= 11) …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods

-1
推荐指数
1
解决办法
1917
查看次数