小编thi*_*ing的帖子

你将如何使用C#4动态类型?

C#4将包含一个新的dynamic关键字,它将动态语言功能引入C#.

您打算如何在自己的代码中使用它,您会提出什么样的模式?您当前项目的哪一部分将使您的代码更清晰或更简单,或启用您可能根本无法做到的事情(除了与IronRuby或IronPython等动态语言的明显互操作之外)?

PS:如果你不喜欢这个C#4,请避免负面评论.

编辑:重新发现问题.

动态的经典用法是大多数stackoverflow C#用户所熟知的.我想知道的是,如果你想到特定的新C#模式,可以有效地利用动态而不会失去太多的C#精神.

c# dynamic c#-4.0

21
推荐指数
4
解决办法
7567
查看次数

我们都在寻找相同的IRepository吗?

我一直试图想出一种方法来编写针对各种数据存储的通用存储库:

public interface IRepository
{
    IQueryable<T> GetAll<T>();
    void Save<T>(T item);
    void Delete<T>(T item);
}
public class MemoryRepository : IRepository {...}
public class SqlRepository : IRepository {...}
Run Code Online (Sandbox Code Playgroud)

我想在每个中使用相同的POCO域类.我也在考虑类似的方法,每个域类都有自己的存储库:

public interface IRepository<T>
{
    IQueryable<T> GetAll();
    void Save(T item);
    void Delete(T item);
}
public class MemoryCustomerRepository : IRepository {...}
public class SqlCustomerRepository : IRepository {...}
Run Code Online (Sandbox Code Playgroud)

我的问题:1)第一种方法是否可行?2)第二种方法是否有任何优势.

design-patterns domain-driven-design irepository

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

为什么泛型经常使用T?

是否有任何理由在泛型中使用'T'?它是某种缩写吗?据我所知,一切正常.例如

public G Say<G>(){ ... }
Run Code Online (Sandbox Code Playgroud)

甚至

public Hello Say<Hello>(){ ... }
Run Code Online (Sandbox Code Playgroud)

generics naming-conventions

10
推荐指数
4
解决办法
2003
查看次数

.Net 4内联MarshalByRefObject方法吗?

我有一些代码依赖于没有内联的方法:

internal class MyClass : BaseClass
{
    // should not be inlined
    public void DoSomething(int id)
    {
       base.Execute(id);
    }
}

public abstract class BaseClass : MarshallByRefObject
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    protected void Execute(params object[] args)
    {
         // does a stack walk to find signature of calling method
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,只有在未内联DoSomething方法时,这才有效.这就是基类派生的原因MarshallByRefObject,它阻止了公共方法的内联.

它一直工作到现在,但我从.Net 4服务器得到了一个堆栈跟踪,显示堆栈行走到了DoSomething的调用者.

.Net 4内联是否更加聪明并且检测到MyClass是内部的并且没有机会被代理替换?

c# inline .net-4.0 marshalbyrefobject

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

在数据库列中,您更喜欢详细命名吗?

你最喜欢哪个?

假设我们有一个通用的Product表,它有一个ID,一个名称和一个类别的外键引用.您是否愿意将您的桌子命名为:

CREATE TABLE Products
(
    ProductID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(CategoryID),
    ProductName varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

使用列的显式命名(例如产品名称,产品 ID)或类似的东西:

CREATE TABLE Products
(
    ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(ID),
    Name varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

从我所看到的,.NET世界中的约定是明确的 - 样本倾向于使用第一个示例,而开源和RoR世界倾向于第二个示例.就个人而言,我发现第一眼看上去更容易阅读和理解: select p.ProductID, p.ProductName, c.CategoryName from Categories c inner join Products p on c.CategoryID = p.CategoryID对我来说似乎比自然更自然select p.ID AS ProductID, p.Name AS …

sql database-design naming naming-conventions

6
推荐指数
2
解决办法
3212
查看次数

C#类型推断:在不应该的地方失败?

请注意以下代码.违规行已被注释掉.

interface I<R> { }

class C : I<int> { }

class Program
{
    private static void function<T, R>(T t) where T : class, I<R>
    {
    }

    static void Main(string[] args)
    {
        // function(new C()); // wont compile
        function<C, int>(new C());
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为类型推断应该找出类型,因为参数T提供了第一种类型,而I<R>提供了第二种类型.

有没有办法重新设计功能,以便调用者可能不必指定类型?

.net c# generics type-inference

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

使用linq读取属性值

我有一个xml文件,如下所示.我要做的是创建一个查询,只选择具有属性"Channel"和值"Automotive"的项目.

<item>
      <title>Industries</title>
      <category type="Channel">Automotive</category>
      <category type="Type">Cars</category>
      <category type="Token">Article</category>
      <category type="SpecialToken">News</category>
      <guid>637f0dd7-57a0-4001-8272-f0fba60feba1</guid>
</item>
Run Code Online (Sandbox Code Playgroud)

这是我的代码

 var feeds = (from item in doc.Descendants("item")
    where item.Element("category").Value == "Channel"  
    select new { }).ToList(); 
Run Code Online (Sandbox Code Playgroud)

我尝试使用item.attribute方法,但我无法获取Item中的值,只有属性Value"type"

有人可以帮我解决这个问题吗?

干杯,克里斯

c# linq linq-to-xml

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