小编Pav*_*nin的帖子

插值字符串的原始类型是什么?

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 …

c# string overloading type-inference string-interpolation

29
推荐指数
2
解决办法
1593
查看次数

暴露DTO时ApiController与ODataController

当我继承我的控制器形式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属性开箱即用,但前面提到的不一致使我做错了.

.net dto odata asp.net-web-api asp.net-apicontroller

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

.NET是否具有时区更改的历史记录?

我们的政府喜欢改变当地时间或启用夏令时.

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只会更改一年中的白天时间.

.net timezone datetime

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

如何使最后一个DataGrid的列占据整个左侧空间?

第一!我知道这似乎是一种重复,但事实并非如此.

我有一个网格作为数据模板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

wpf wpfdatagrid

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

如何将特定变更集版本视为相对于最新版本的更改?

我回滚了一个变更集.现在,我需要查看已回滚的变更集,其中包含"已实现的"待定更改.因此,在提交更改之前,所有内容都是如此.

当我获得文件覆盖的特定版本时,我在待定更改窗口中看不到任何内容.我怎样才能获得我需要的状态?可能吗?

tfs shelveset tfvc

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

我能以某种方式告诉Resharper有关ViewModel的类型吗?

我们在不同的程序集中有Views和ViewModel.视图的程序集具有对VM的引用.(有时我们需要代码).

ViewModel的DataContext是在代码中设置的,而不是在XAML中.因此,VS和Resharper都不能提供帮助,因为intellisense和Resharper也提供了很多警告.

是否有任何针对Resharper的指令我们可以在XAML注释中设置我们打算将View与VM一起使用?

更新:

不错的博客文章作为接受的答案的补充.

c# resharper mvvm

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

当嵌套堆栈处于 DELETE_COMPLETE 状态时,如何强制更新根堆栈?

我必须删除嵌套堆栈,但现在无法更新根堆栈。

我收到以下错误:

堆栈处于 DELETE_COMPLETE 状态并且无法更新。

我应该怎么做才能使 CFN 更新根堆栈并重新创建嵌套堆栈?

amazon-web-services aws-cloudformation

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

如何为位置记录定义额外的初始化逻辑?

我想验证用于记录初始化的参数,如果验证失败的话。对于常规类,我可以使用构造函数来实现,但是我应该如何处理记录呢?

对于常规类,我还可以拥有私有构造函数和公共静态工厂方法,它们返回错误或有效实例,但看起来无法将记录的主构造函数设为私有。

对于非位置记录,它与任何其他类一样:

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)

.net c# c#-9.0

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

如何绑定到集合真的有用吗?

好吧,我很困惑.

如果我的控件具有类型的依赖属性ItemsSource,IEnumerable并且用户将集合绑定到它,那么我有什么对象DependencyPropertyChangedEventArgs.NewValue

据我所知CollectionView,隐藏为集合创建,我希望args.NewValue是类型ICollectionView.

来自这个博客:

当用户将WPF属性绑定到数据集合时,WPF会自动创建一个视图来包装集合,并将属性绑定到视图,而不是原始集合.此行为总是发生,并且独立于CollectionViewSource.

但调试器(VS 2012,.net v.4.0)告诉我,我收到了原始的原始集合NewValue.(BindsDirectlyToSource没有设置,默认情况下等于false)
这怎么可能?!

我无法理解在这种情况下WPF控件如何支持排序,分组和过滤.
CollectionView如何以及何时注入和使用?

data-binding wpf collectionview

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

为什么设置$ window.location.href在promise中设置时不起作用?

我向服务器发送请求,并希望在收到响应后有条件地重定向到另一个页面(非角度).因此,导航发生在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.

任何人都可以澄清或分享解释真实情况的链接.

angularjs angular-routing

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