小编Ask*_*ein的帖子

方法参数:接口VS通用类型

使用这两个方法实现中的一个或另一个的参数是什么(在Example类中)?

public interface IInterface
{
    void DoIt();
}

public class Example
{
    public void MethodInterface(IInterface arg)
    {
        arg.DoIt();
    }

    public void MethodGeneric<T>(T arg) where T: IInterface
    {
        arg.DoIt();
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:如果方法返回一个IInterfaceT,我会选择"通用"方法,以避免在需要时在T类型中进一步转换.

c# generics

6
推荐指数
1
解决办法
647
查看次数

ReactiveUI内存使用情况

我最近重构了MVVM应用程序以使用ReactiveUI。基本上,我已经更改了ViewModels中的许多代码以使用ReactiveLists,派生列表和ObservableAsPropertyHelpers。完成后,我注意到该应用程序的内存使用量从100MB增加到550MB(在完全相同的情况下,具有相同的数据和功能)。

我有来自同一个类的大量对象(约3000个),并且使用VS的诊断工具,我注意到该类的OAPH(它们有5个)占用了大量内存。最初,我假设线程问题,所以我决定尝试在测试应用程序中重现该问题。

为此,我创建了一个ViewModel:

public class ItemViewModel : ReactiveObject
{
    private ObservableAsPropertyHelper<bool> myVar1;
    public bool MyProperty1
    {
        get { return myVar1.Value; }
    }

    public ItemViewModel()
    {
        myVar1 = Observable.Return(false).ToProperty(this, x => x.MyProperty1);
    }
 }
Run Code Online (Sandbox Code Playgroud)

为了简便起见,我删除了另外三个完全相同的OAPH。

我的主要ViewModel如下所示:

public class MainViewModel : ReactiveObject
{
    public IReactiveList<ItemViewModel> Items { get; private set; }

    public MainViewModel()
    {
        var items = new List<ItemViewModel>();
        for (int i = 0; i < 3000; i++)
        {
            items.Add(new ItemViewModel());
        }
        Items = new ReactiveList<ItemViewModel>(items);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# mvvm reactiveui

6
推荐指数
0
解决办法
171
查看次数

(新格式)visual studio项目中的可选appsettings.local.json

我的应用程序使用appsettings.json进行某些设置.如果存在appsettings.local.json,则应该覆盖appsettings.json以包含它包含的任何设置.到目前为止,没问题.

但我使用git进行版本控制.显然,我不希望其他用户拉下我的本地设置.所以我git忽略appsettings.json.

此外,解决方案中有很多项目.它们共享相同的设置.所以在解决方案级别有一个appsettings.json,所有项目都将它作为链接包含在内.

还不错,除了一件事.为了可以使用,我必须将appsettings.local.json复制到输出目录.但它不应该在版本控制中.因此,如果有人克隆解决方案新鲜,他们将没有它.那应该没问题,但事实并非如此.VS. 说"这个文件应该链接,但它到底在哪里?" 构建错误.

我该怎么处理?

c# git appsettings local-files visual-studio-2017

6
推荐指数
4
解决办法
3547
查看次数

Blazor文本字段输入用户键入延迟

如何在Blazor中为事件(OnInput)添加延迟?
例如,如果用户正在文本字段中输入,而您要等到用户完成输入。

Blazor.Templates :: 3.0.0-preview8.19405.7

码:

@page "/"
<input type="text" @bind="Data" @oninput="OnInputHandler"/>
<p>@Data</p>

@code {    
    public string Data { get; set; }   

    public void OnInputHandler(UIChangeEventArgs e)
    {
        Data = e.Value.ToString();
    }    
}
Run Code Online (Sandbox Code Playgroud)

c# throttling debounce blazor blazor-server-side

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

Asp.net MVC core中Mapper.ProjectTo和Mapper.Map有什么区别

我们什么时候可以在Asp.Net core应用程序中使用 Mapper.ProjectToover ?Mapper.Map使用ProjectToEntity Framework Core 中的方法,如果我们将其添加到语句的开头,是否会减少我从数据库查询以匹配模型的字段数量 _mapper.ProjectTo?如何减少查询字段数?

而不是使用这个

_mapper.ProjectTo<CompareVarValdto>(_compareRepo.GetCompareDetailsByid(id))
Run Code Online (Sandbox Code Playgroud)

我们可以用这个吗?

_mapper.Map<CompareVarValdto>(result)
Run Code Online (Sandbox Code Playgroud)

ComapreVarValdto.cs

public class CompareVarValdto
{
    public int CompareVarValId { get; set; }
    public int CURRENT_CATEGORY_ID { get; set; }
    public int Current_LaunguageId { get; set; }
    public int Current_compareDimId { get; set; }
    public string CONTENT { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器获取方法代码片段

[Route("api/[controller]")]
[ApiController]
public class ComapareController : ControllerBase
{
    private readonly ICompare _compareRepo;
    private readonly IMapper _mapper;
    public ComapareController(ICompare compare, IMapper …
Run Code Online (Sandbox Code Playgroud)

c# automapper entity-framework-core asp.net-core

6
推荐指数
1
解决办法
2785
查看次数

如何避免安全处理已关闭

我在测试中有以下代码:

 private void LoadIncomeStatementViewModel()
    {
        using (var evt = new AutoResetEvent(false))
        {
            EventHandler handler = (sender, e) => evt.Set();

            _incomeStatementViewModel.Loaded -= handler;
            _incomeStatementViewModel.Loaded += handler;
            _incomeStatementViewModel.LoadDataCommand.Execute(null);
            evt.WaitOne();
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行以下测试

[Test]
public void Test()
{
   LoadIncomeStatementViewModel();
   // do something

   LoadIncomeStatementViewModel();
   // do something
}
Run Code Online (Sandbox Code Playgroud)

第二次调用LoadIncomeStatementViewModel()时,我在EventHandler处理程序中收到"安全句柄已被处置"错误消息=(sender,e)=> evt.Set();

当方法第二次重新运行时,using语句肯定会重新初始化evt.我觉得这可能与Resharper Test Runner(Nunit 2.7)有关....

有关如何解决这个问题的任何想法?

谢谢杰里米

c# handle autoresetevent

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

.Net 4 Web API在参数中接收NULL数据

我是一个Web API新手在.Net 4中编写RESTFul Web Api服务.我为我正在调用的类配置了一个控制器Authentication.我遇到的问题是,当我将JSON数据发布或放入web api服务时,控制器中的处理程序被调用,但参数对象中包含NULL数据.我可以成功获取数据,但Post和Put会提供空参数对象.

我已经从客户端应用程序和Fiddler测试过,我得到了相同的结果.这是我从Fiddler发送的内容:

Action: PUT
URI: http://127.0.0.1:81/Authentication/xyz/
HTTP Version: HTTP/1.1
Request Headers:
User-Agent: Fiddler
Host: 127.0.0.1:81
Content-Type: application/json; charset=utf-8
Content-Length: 75
Request Body:
{"hashvalue":"kbVFNeBbNHmYQXXlS6d7Ag==","password":"test","username":"dan"}
Run Code Online (Sandbox Code Playgroud)

当我在身份验证控制器中的Put处理程序中设置断点时:

    public void Put(string IDstring, Authentication value)
    {

    }
Run Code Online (Sandbox Code Playgroud)

我在观察窗口中看到以下内容:

IDstring                    null    string
value   {bbsRESTResources.Authentication}   bbsRESTResources.Authentication
    hashvalue   null    string
    password    null    string
    username    null    string
Run Code Online (Sandbox Code Playgroud)

我的身份验证类如下所示:

namespace bbsRESTResources
{
    public class Authentication
    {
        public string username;
        public string password;
        public string hashvalue;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的路线看起来像这样:

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}", …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

5
推荐指数
2
解决办法
6781
查看次数

在 ASP.NET Web API 中序列化继承类型

我在 Web API 中序列化继承的对象时遇到问题。

[DataContract] 
public class Item{
     [DataMember]
     public int ID{get; set;}
     [DataMember]
     public string Name{get; set;} }

[DataContract] 
public class SitecoreItem : Item{
     [DataMember]     
     public DbType SitecoreInstance{get; set;} }
Run Code Online (Sandbox Code Playgroud)

我试图从 WebAPI 返回上述 SitecoreItem,但它会出现序列化错误。我究竟做错了什么?

c# asp.net-web-api

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

WPF ItemsControl水平方向和填充父级?

我试图将项目水平放置在ItemControl中,同时使它们填充父控件.

这是我的XAMl:

             <ItemsControl ItemsSource="{Binding AnnualWeatherViewModels}" Visibility="{Binding IsAnnualWeatherViewModels, Converter={StaticResource VisibilityConverter}}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"></StackPanel>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <V:AerosolSimpleWeatherCharacteristicsView DataContext="{Binding}"></V:AerosolSimpleWeatherCharacteristicsView>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

我尝试过的两种变体ItemsControl.ItemsPanel是:

<StackPanel Orientation="Horizontal"></StackPanel>
Run Code Online (Sandbox Code Playgroud)

和:

<DockPanel LastChildFill="False"></DockPanel>
Run Code Online (Sandbox Code Playgroud)

然而,两者都没有达到预期的结果,StackPanel压缩所有项目,并且DockPanel将填充父控件的空间,其中大部分空间专用于最后一项,或者不填充父空间,具体取决于值LastChildFill.

那么如何布置ItemsControl水平项目并让它们填充父控件的空间?

我最终创建了这个自定义控件作为答案中的sugested:

public partial class StretchingPanel : Grid
    {
        public static readonly DependencyProperty OrientationProperty =
            DependencyProperty.Register("Orientation", typeof(Orientation), typeof(StretchingPanel), new UIPropertyMetadata(System.Windows.Controls.Orientation.Horizontal));

        public static readonly DependencyProperty FillFirstItemProperty =
            DependencyProperty.Register("FillFirstItem", typeof(bool), typeof(StretchingPanel), new UIPropertyMetadata(true));

        public static readonly DependencyProperty FillFirstItemFactorProperty =
            DependencyProperty.Register("FillFirstItemFactor", typeof(double), typeof(StretchingPanel), new …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf user-interface xaml

5
推荐指数
2
解决办法
5808
查看次数

C#HtmlAgilityPack内部html在追加节点后不会改变

在我的C#中更改加载的html,并需要将html文档作为纯文本.但每当我将新节点附加到文档节点之一时,即使成功添加新节点,根节点的内部html也不会更改.调试后我注意到只有新节点的父节点的InnerHtml属性发生了变化,例如:

HtmlDocument doc;
HtmlNode root doc.DocumentNode;
HtmlNode node2 = root.ChildNodes[1];
HtmlNode newNode = new HtmlNode(...);
node2.Append(newNode);
Run Code Online (Sandbox Code Playgroud)

有:

<root>
    <node1>
    </node1>
    <node2>
        <node3>
        <node3>
        <newNode>
        </newNode>
    </node2>
</root>
Run Code Online (Sandbox Code Playgroud)

node2.InnerHtml将是

        <node3>
        <node3>
        <newNode>
        </newNode>
Run Code Online (Sandbox Code Playgroud)

但是root.InnerHtml是

<root>
    <node1>
    </node1>
    <node2>
        <node3>
        <node3>
    </node2>
</root>
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?(我知道我可以手动更新每个文档的节点内部html,但常见...)

html c# tree nodes html-agility-pack

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