MSDN 文档包含有关隐式转换的部分:
var s = $"hello, {name}";
System.IFormattable s = $"Hello, {name}";
System.FormattableString s = $"Hello, {name}";
Run Code Online (Sandbox Code Playgroud)
从第一个字符串开始,原始类型的插值字符串就是string.好的,我可以理解它,但是......我意识到字符串没有实现IFormattable.所以它看起来像编译器的一些魔法类似于它对lambdas的作用.
现在猜猜这段代码的输出:
void Main()
{
PrintMe("Hello World");
PrintMe($"{ "Hello World"}");
}
void PrintMe(object message)
{
Console.WriteLine("I am a " + message.GetType().FullName);
}
//void PrintMe(string message)
//{
// Console.WriteLine("I am a string " + message.GetType().FullName);
//}
void PrintMe(IFormattable message)
{
Console.WriteLine("I am a " + message.GetType().FullName);
}
Run Code Online (Sandbox Code Playgroud)
暗示:
我是System.String
我是System.Runtime.CompilerServices.FormattableStringFactory + ConcreteFormattableString
如果您从第二种方法中删除评论,您将获得:
我是一个字符串System.String
我是一个字符串System.String
好的
我可能不太了解重载分辨率,但是C#规范的 14.4.2 …
当我继承我的控制器形式ODataControllervs 时,有人能解释我ApiController吗?
问题是由返回的结果ApiController可以使用OData查询过滤的事实引起的.
如果我应用于QueraybleAttribute控制器的方法,即使操作返回,也会处理查询IEnumerable.
但是如果没有此属性但是通过调用config.EnableQuerySupport(),仅在方法返回时才处理查询IQueryable.
我认为这不是一致的行为.WebAPI 文档和示例意味着控制器必须从ODataController中删除.我有点困惑.
任一ApiController accidentally和部分地支撑部分(至少$跳过,$滤波器和$顶部)的OData协议.或者这是设计的,我需要ODataController来完成ODataSupport.
真正的问题是我的服务暴露了DTO,而不是POCO.可能没有一对一的映射.需要将OData查询再次转换为DTO到针对POCO的EF查询.
现在只玩OData.我检索实体并将它们转换为DTO.不可否认,对于每个请求来说,从数据库中获取所有这些数据并不是非常有效,但仍然可以容忍实验.但是,如果它需要一些过滤的DTO子集,则定义上不需要将所有实体返回给客户端.
OData查询开始使用ApiController和Querayble属性开箱即用,但前面提到的不一致使我做错了.
我们的政府喜欢改变当地时间或启用夏令时.
MS为俄罗斯部署补丁以考虑新的时间变化.
现在有一个问题,即变化的历史是否存在?
当我在01.01.2000系统获得当天的UTC时间时,系统应记住莫斯科时区的时间为+3 UTC.(在夏天+4)那一刻.
对于2012年1月1日,我们在冬季和夏季都有+4 UTC.很快我们将有+3 UTC.
简单的测试表明,.NET不会保留有关更改的记录:
var t = new DateTime(2012,1,1);
// UTC +4 expected
System.Console.WriteLine(t.ToLocalTime());
// UTC +4 expected
t = new DateTime(2012,06,1);
System.Console.WriteLine(t.ToLocalTime());
// UTC +3 expected
t = new DateTime(2000,1,1);
System.Console.WriteLine(t.ToLocalTime());
// UTC +4 expected
t = new DateTime(2000,6,1);
System.Console.WriteLine(t.ToLocalTime());
Run Code Online (Sandbox Code Playgroud)
是否存在一些额外的API来应对这个问题?
更新:
找到了类TimeZoneInfo和相关的AdjustmentRule类.留下来测试TimeZoneInfo.Local时区的自定义是否会影响DateTime API.
更新2:
似乎UTC偏移不会存储为历史记录,AdjustmentRule只会更改一年中的白天时间.
第一!我知道这似乎是一种重复,但事实并非如此.
我有一个网格作为数据模板DataGrid.RowDetails.它有三列:两列Width="Auto"和三维列Width="*"
<DataTemplate x:Key="NotEmptyDistributionsTemplateKey">
<DataGrid ItemsSource="{Binding SoftwareVersionDistributions}"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="True"
CanUserSortColumns="False"
IsReadOnly="True"
CanUserResizeRows="False"
AutoGenerateColumns="False"
RowHeaderWidth="0"
Margin="20,5"
HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn
Header="Architecture"
Binding="{Binding SoftwareArchitecture.Name, TargetNullValue=???, FallbackValue=???}"
Width="Auto"/>
<DataGridTextColumn
Header="Language"
Binding="{Binding SysCodepage.Title, TargetNullValue=???, FallbackValue=???}"
Width="Auto"/>
<DataGridHyperlinkColumn
Header="Link"
Binding="{Binding DownloadLink}"
Width="*"
CanUserResize="False"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果Grid嵌套在单元格中,此模板恰好显示3列.但是当它被用作RowDetaislTemplate第4个空列出现时.这让我很生气.
有没有人知道为什么会发生这种情况?
更新1.看起来如何:

更新2.
最后我找到了灵魂.刚刚添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"
现在可以了:

但我无法理解这种奇怪的行为.
更新3(可能对某人有帮助)
最近我们发现了一个用户拥有的错误,开发人员没有.该错误再次涉及DataGrid的宽度和对齐方式.好吧,可能这不是一个真正的错误,但我们有不同的控件行为.
研究表明,安装.net framework 4.5安装程序时还更新了.net framework 4.0.此更新以某种方式改变了DataGrid的行为.(对于预期的一个)
我们要求我们的用户安装框架4.5并且问题消失了.虽然我们的应用仍然针对.net 4.0
我回滚了一个变更集.现在,我需要查看已回滚的变更集,其中包含"已实现的"待定更改.因此,在提交更改之前,所有内容都是如此.
当我获得文件覆盖的特定版本时,我在待定更改窗口中看不到任何内容.我怎样才能获得我需要的状态?可能吗?
我们在不同的程序集中有Views和ViewModel.视图的程序集具有对VM的引用.(有时我们需要代码).
ViewModel的DataContext是在代码中设置的,而不是在XAML中.因此,VS和Resharper都不能提供帮助,因为intellisense和Resharper也提供了很多警告.
是否有任何针对Resharper的指令我们可以在XAML注释中设置我们打算将View与VM一起使用?
更新:
不错的博客文章作为接受的答案的补充.
我必须删除嵌套堆栈,但现在无法更新根堆栈。
我收到以下错误:
堆栈处于 DELETE_COMPLETE 状态并且无法更新。
我应该怎么做才能使 CFN 更新根堆栈并重新创建嵌套堆栈?
我想验证用于记录初始化的参数,如果验证失败的话。对于常规类,我可以使用构造函数来实现,但是我应该如何处理记录呢?
对于常规类,我还可以拥有私有构造函数和公共静态工厂方法,它们返回错误或有效实例,但看起来无法将记录的主构造函数设为私有。
对于非位置记录,它与任何其他类一样:
public record Person
{
public string FirstName {get; init;}
public string LastName {get; init;}
public Person (string firstName, string lastName)
{
(FirstName,LastName) = (firstName, lastName);
}
}
Run Code Online (Sandbox Code Playgroud) 好吧,我很困惑.
如果我的控件具有类型的依赖属性ItemsSource,IEnumerable并且用户将集合绑定到它,那么我有什么对象DependencyPropertyChangedEventArgs.NewValue?
据我所知CollectionView,隐藏为集合创建,我希望args.NewValue是类型ICollectionView.
来自这个博客:
当用户将WPF属性绑定到数据集合时,WPF会自动创建一个视图来包装集合,并将属性绑定到视图,而不是原始集合.此行为总是发生,并且独立于CollectionViewSource.
但调试器(VS 2012,.net v.4.0)告诉我,我收到了原始的原始集合NewValue.(BindsDirectlyToSource没有设置,默认情况下等于false)
这怎么可能?!
我无法理解在这种情况下WPF控件如何支持排序,分组和过滤.
CollectionView如何以及何时注入和使用?
我向服务器发送请求,并希望在收到响应后有条件地重定向到另一个页面(非角度).因此,导航发生在then承诺的一部分内.
我试过了:
$location.path(url)
Run Code Online (Sandbox Code Playgroud)
和
$window.location.href = url;
$windo.location.reload();
Run Code Online (Sandbox Code Playgroud)
什么都行不通
但是如果我用setTimeout(navigate,0)重定向来包装这两个调用中的任何一个.
在消化周期中看起来像Angular guards url.
任何人都可以澄清或分享解释真实情况的链接.