小编Tho*_*que的帖子

常见的Haskell运算符是否有明显的名称?

我正在读" 了解你是一个很好的Haskell,我从来不知道如何发音Haskell运算符.他们有"真实"的名字吗??

例如,你如何大声朗读这样的表达?

Just (+3) <*> Just 9
Run Code Online (Sandbox Code Playgroud)

我知道这>>=是"绑定",但其他人呢?由于Google不考虑非字母数字字符,因此很难进行有效的搜索...

我意识到你可以创建自己的运算符,所以当然不是所有运算符都可以有名称,但我希望常见的运算符(例如在Applicative或中定义的运算符Monad)必须具有名称...

haskell operators

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

LINQ OrderBy与ThenBy

任何人都可以解释之间的区别:

tmp = invoices.InvoiceCollection
              .OrderBy(sort1 => sort1.InvoiceOwner.LastName)
              .OrderBy(sort2 => sort2.InvoiceOwner.FirstName)
              .OrderBy(sort3 => sort3.InvoiceID);
Run Code Online (Sandbox Code Playgroud)

tmp = invoices.InvoiceCollection
              .OrderBy(sort1 => sort1.InvoiceOwner.LastName)
              .ThenBy(sort2 => sort2.InvoiceOwner.FirstName)
              .ThenBy(sort3 => sort3.InvoiceID);
Run Code Online (Sandbox Code Playgroud)

如果我想按3项数据订购,哪种方法是正确的?

linq

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

DataContractSerializer不调用我的构造函数?

我刚刚意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时,DataContractSerializer不会调用构造函数!

以这门课为例,例如:

[DataContract]
public class Book
{
    public Book()
    { // breakpoint here
    }

    [DataMember(Order = 0)]
    public string Title { get; set; }
    [DataMember(Order = 1)]
    public string Author { get; set; }
    [DataMember(Order = 2)]
    public string Summary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我反序列化该类的对象时,不会触发断点.我完全不知道它是如何可能的,因为它是这个对象的唯一构造函数!

我假设编译器可能因为DataContract属性而生成了额外的构造函数,但我无法通过反射找到它...

所以,我想知道的是:如何在不调用构造函数的情况下创建我的类的实例?

注意:我知道OnDeserializing在反序列化开始时我可以使用该属性初始化我的对象,这不是我的问题的主题.

.net c# serialization constructor datacontractserializer

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

为什么C#没有实现索引属性?

我知道,我知道...... Eric Lippert对这类问题的回答通常是" 因为它不值得设计,实施,测试和记录它的成本 ".

但是,我还是想要一个更好的解释......我正在阅读关于新C#4功能的博客文章,在关于COM Interop的部分中,以下部分引起了我的注意:

顺便说一句,这段代码使用了另外一个新功能:索引属性(仔细查看Range之后的那些方括号.)但是此功能仅适用于COM互操作; 您无法在C#4.0中创建自己的索引属性.

好的,但为什么呢?我已经知道并且后悔在C#中创建索引属性是不可能的,但这句话让我再次思考它.我可以看到几个很好的理由来实现它:

  • CLR支持它(例如,PropertyInfo.GetValue有一个index参数),所以遗憾的是我们无法在C#中利用它
  • 它支持COM互操作,如文章所示(使用动态调度)
  • 它是在VB.NET中实现的
  • 已经可以创建索引器,即将索引应用于对象本身,因此将想法扩展到属性,保持相同的语法并仅替换this属性名称可能没什么大不了的.

它可以写出那种东西:

public class Foo
{
    private string[] _values = new string[3];
    public string Values[int index]
    {
        get { return _values[index]; }
        set { _values[index] = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

目前我知道的唯一解决方法是创建一个ValuesCollection实现索引器的内部类(例如),并更改Values属性以便它返回该内部类的实例.

这很容易做到,但很烦人......所以也许编译器可以为我们做!一个选项是生成一个实现索引器的内部类,并通过公共通用接口公开它:

// interface defined in the namespace System
public interface IIndexer<TIndex, TValue>
{
    TValue this[TIndex index]  { get; set; }
}

public …
Run Code Online (Sandbox Code Playgroud)

c# language-features indexed-properties

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

XAML中的#region

我实际上不喜欢我的代码中的#region.由于某种原因让我发疯,我想把它们放在我的XAML中.我希望整个部分都有#region-like的东西并将它们折叠起来(例如我的<Window.CommandBindings>,<Grid.*Definitions>,<Menu>,<Toolbar>等等.

这存在吗?如果没有,<RegionCollapse>怎么样

wpf xaml visual-studio

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

如何将对嵌套类成员的访问限制为封闭类?

是否可以指定封闭类可以访问嵌套类的成员,而不是其他类?

这是问题的一个例子(当然我的实际代码有点复杂......):

public class Journal
{
    public class JournalEntry
    {
        public JournalEntry(object value)
        {
            this.Timestamp = DateTime.Now;
            this.Value = value;
        }

        public DateTime Timestamp { get; private set; }
        public object Value { get; private set; }
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想阻止客户端代码创建实例JournalEntry,但Journal必须能够创建它们.如果我将构造函数Journal设为public,那么任何人都可以创建实例......但如果我将其设为私有,则无法执行!

请注意,JournalEntry该类必须是公共的,因为我希望能够将现有条目公开给客户端代码.

任何建议将不胜感激!


更新:感谢大家的意见,我最终选择IJournalEntry了私人JournalEntry课程实现的公共界面(尽管我的问题是最后一个要求......)

c# nested-class access-levels

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

使用Dapper获取DateTime作为UTC

我正在使用Dapper将我的实体映射到SQL Server CE.如果我保存DateTimeKind=Utc,当我读回我得到一个DateTimeKind=Unspecified,从而导致所有类型的问题.

例:

var f = new Foo { Id = 42, ModificationDate = DateTime.UtcNow };
Console.WriteLine("{0} ({1})", f.ModificationDate, f.ModificationDate.Kind);
connection.Execute("insert into Foo(Id, ModificationDate) values(@Id, @ModificationDate)", f);
var f2 = connection.Query<Foo>("select * from Foo where Id = @Id", f).Single();
Console.WriteLine("{0} ({1})", f2.ModificationDate, f2.ModificationDate.Kind);
Run Code Online (Sandbox Code Playgroud)

此代码提供以下输出:

20/09/2012 10:04:16 (Utc)
20/09/2012 10:04:16 (Unspecified)
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用a DateTimeOffset,但遗憾的是SQL CE不支持这种类型.

有解决方法吗?我可以告诉Dapper假设所有日期都有DateTimeKind.Utc吗?更一般地说,我有哪些自定义映射的选项?


编辑:我目前的解决方法是修补Dapper实现结果后的日期,但它有点气味......

var results = _connection.Query<Foo>(sql, param).Select(PatchDate);

...

static Foo PatchDate(Foo f)
{
    if (f.ModificationDate.Kind …
Run Code Online (Sandbox Code Playgroud)

.net c# orm utc dapper

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

测试lambda表达式相等性的最有效方法

给定方法签名:

public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
Run Code Online (Sandbox Code Playgroud)

如果两个表达式相同,最有效的方法是什么?这只需要适用于简单的表达式,我的意思是所有"支持"的都是简单的MemberExpressions,例如c => c.ID.

一个示例调用可能是:

AreTheSame<User>(u1 => u1.ID, u2 => u2.ID); --> would return true
Run Code Online (Sandbox Code Playgroud)

c# lambda

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

使用XDocument加载字符串时路径中的非法字符

我在字符串中有非常简单的XML,我正在尝试加载,XDocument以便我可以使用LINQ to XML:

 var xmlString = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
 <person>Test Person</person>";

 var doc = XDocument.Load(xmlString); //'Illegal characters in path' error thrown here
Run Code Online (Sandbox Code Playgroud)

Illegal characters in path.当我尝试加载XML时,我收到一个错误; 有人可以解释为什么会这样吗?谢谢.

c# xml .net-4.0

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

如何将WPF字符串格式设置为百分比乘以100?

我有一个文本框绑定到对象中的属性.我已将字符串格式设置为p0.

但是,当我输入12时,例如它被格式化为1200%(乘以100并添加%符号)

如何设置stringformat以便例如20格式化为20%?

我目前的控制是:

<TextBox Text="{Binding Path=MyCase, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=p0}"/>
Run Code Online (Sandbox Code Playgroud)

如何改变字符串格式,使7的格式为7%而不是700%?

data-binding wpf

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