我正在读" 了解你是一个很好的Haskell,我从来不知道如何发音Haskell运算符.他们有"真实"的名字吗??
例如,你如何大声朗读这样的表达?
Just (+3) <*> Just 9
Run Code Online (Sandbox Code Playgroud)
我知道这>>=是"绑定",但其他人呢?由于Google不考虑非字母数字字符,因此很难进行有效的搜索...
我意识到你可以创建自己的运算符,所以当然不是所有运算符都可以有名称,但我希望常见的运算符(例如在Applicative或中定义的运算符Monad)必须具有名称...
任何人都可以解释之间的区别:
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项数据订购,哪种方法是正确的?
我刚刚意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时,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在反序列化开始时我可以使用该属性初始化我的对象,这不是我的问题的主题.
我知道,我知道...... Eric Lippert对这类问题的回答通常是" 因为它不值得设计,实施,测试和记录它的成本 ".
但是,我还是想要一个更好的解释......我正在阅读关于新C#4功能的博客文章,在关于COM Interop的部分中,以下部分引起了我的注意:
顺便说一句,这段代码使用了另外一个新功能:索引属性(仔细查看Range之后的那些方括号.)但是此功能仅适用于COM互操作; 您无法在C#4.0中创建自己的索引属性.
好的,但为什么呢?我已经知道并且后悔在C#中创建索引属性是不可能的,但这句话让我再次思考它.我可以看到几个很好的理由来实现它:
PropertyInfo.GetValue有一个index参数),所以遗憾的是我们无法在C#中利用它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) 我实际上不喜欢我的代码中的#region.但由于某种原因让我发疯,我想把它们放在我的XAML中.我希望整个部分都有#region-like的东西并将它们折叠起来(例如我的<Window.CommandBindings>,<Grid.*Definitions>,<Menu>,<Toolbar>等等.
这存在吗?如果没有,<RegionCollapse>怎么样
是否可以指定封闭类可以访问嵌套类的成员,而不是其他类?
这是问题的一个例子(当然我的实际代码有点复杂......):
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课程实现的公共界面(尽管我的问题是最后一个要求......)
我正在使用Dapper将我的实体映射到SQL Server CE.如果我保存DateTime有Kind=Utc,当我读回我得到一个DateTime与Kind=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) 给定方法签名:
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) 我在字符串中有非常简单的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时,我收到一个错误; 有人可以解释为什么会这样吗?谢谢.
我有一个文本框绑定到对象中的属性.我已将字符串格式设置为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%?