小编mad*_*dd0的帖子

如何使用params强制使用扩展方法而不是实例方法?

我无法让C#编译器调用我创建的扩展方法,因为它更喜欢使用带params参数的实例方法.

例如,假设我有以下类及其方法:

public class C
{
    public void Trace(string format, params object[] args)
    {
         Console.WriteLine("Called instance method.");
    }
}
Run Code Online (Sandbox Code Playgroud)

并且扩展:

public static class CExtensions
{
    public void Trace(this C @this, string category, string message, params Tuple<string, decimal>[] indicators)
    {
        Console.WriteLine("Called extension method.");
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的示例程序中:

public void Main()
{
    var c = new C();

    c.Trace("Message");
    c.Trace("Message: {0}", "foo");
    c.Trace("Category", "Message", new KeyValuePair<string, decimal>("key", 123));
}
Run Code Online (Sandbox Code Playgroud)

打印所有电话Called instance method..

C显然,我没有访问类,或者我不打算创建扩展方法,我的扩展很重要,因为它允许我的用户继续使用他们已经知道的具有一些附加值的类.

根据我的理解,编译器将支持实例方法而不是扩展方法,但这是唯一的规则吗?这意味着任何具有类似方法的类Method(string format, params object[] args) …

c# extension-methods

11
推荐指数
2
解决办法
2271
查看次数

错误:(null)不是有效的包含控制器密钥路径?

我正在尝试将导航控制器作为模态呈现,我收到此警告:

错误:(null)不是有效的包含控制器密钥路径

有谁知道我做错了什么?我只是将一个segue从另一个导航控制器中的按钮连接到指定的导航控制器,它将无法工作,我收到此警告.

storyboard ios5 xcode4.2

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

元素的布局测量覆盖不应返回 NaN 值作为其 DesiredSize

Measure当我尝试调用动态计算的大小并将其传递给该方法时,我遇到了类似的问题:

元素“System.Windows.Controls.StackPanel”的布局测量覆盖不应返回 NaN 值作为其 DesiredSize。

我正在尝试动态创建一个 StackPanel 并打印它。这是我的代码:

StackPanel printPanel = new StackPanel();

PrintableArea.Children.Remove(ChartBorder);
printPanel.Children.Add(ChartBorder);

//Get selected printer capabilities
System.Printing.PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);

//Get scale of the print wrt to screen of visual
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / printPanel.ActualWidth, capabilities.PageImageableArea.ExtentHeight / printPanel.ActualHeight);

//Transform the Visual to scale
printPanel.LayoutTransform = new ScaleTransform(scale, scale);

//Get the size of the printer page
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);

//Update the layout of the visual to the printer page size.
printPanel.Measure(sz);
printPanel.Arrange(new Rect(new …
Run Code Online (Sandbox Code Playgroud)

.net printing wpf

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

使用TFS SDK显示项目历史记录窗口

我正在编写一个通过官方SDK与TFS集成的应用程序,以自动化和支持各种常见操作.虽然大多数都是自动化,而且TFS API几乎暴露了我需要的一切,但是一些操作需要用户干预,所以我需要向用户显示信息.

我发现了一些方法Difference.VisualDiffItems,可以让我使用Visual Studio使用的相同UI轻松地直观地比较文件.我还需要显示项目的历史记录(包括分支,重命名等),我很乐意使用内置的UI而不必编写自己的UI.项目历史UI实际上非常复杂,我认为MS会在SDK中提供它,但我似乎无法找到它.

任何人都可以确认TFS SDK没有提供可视化项目历史记录的必要方法,或者指向正确的方向吗?

.net tfs tfs-sdk

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

如何使用.NET Core依赖项注入在运行时解析服务并注入其他构造函数参数?

我有一个用例,其中我想使用.NET Core依赖项注入创建存储库实例,但需要在运行时更改构造函数参数之一。确切地说,应在运行时确定的参数是“数据库连接”,它将指向由调用者确定的一个或另一个数据库。顺便说一下,该类型在DI容器中注册,但其他所有类型都已注册。

调用者将使用存储库工厂类型来创建具有所需连接的存储库。

看起来像这样:

class ARepository : IARepository
{
    public ARepository(IService1 svc1, IService2 svc2, IConnection connection) { }

    public IEnumerable<Data> GetData() { }
}

class RepositoryFactory : IRepositoryFactory
{
    public RepositoryFactory(IServiceProvider serviceProvider) =>
        _serviceProvider = serviceProvider;

    public IConnection CreateAlwaysFresh<TRepository>() =>
        this.Create<TRepository>(new FreshButExpensiveConnection());

    public IConnection CreatePossiblyStale<TRepository>() =>
        return this.Create<TRepository>(new PossiblyStaleButCheapConnection());

    private IConnection Create<TRepository>(IConnection conn)
    {
        // Fails because TRepository will be an interface, not the actual type
        // that I want to create (see code of AService below)
        return …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection .net-core asp.net-core

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

如何在 Azure DevOps 构建管道模板中设置构建名称 (Build.BuildNumber)?

我需要创建多个构建定义,它们都将执行完全相同的步骤。基本上,改变的只是触发器和一些参数。因此,我将它们全部基于一个可以完成所有繁重工作的模板。效果很好。

$(Build.BuildNumber)然而,出于多种原因,我需要定制 的值,一些是美观的,一些是实用的。根据配置运行或构建编号,我所要做的就是name在 YAML 定义中设置属性。

我所有的定义都应该具有相同的名称格式,所以我想直接在模板中定义它。name但是在模板中设置顶级属性会导致错误消息:

/templates/default-build.yml(行:5,列:1):意外值“名称”

在各个定义中设置属性可以按预期工作,但不会作为解决方案“扩展”。

各个定义如下所示:

trigger:
- master

extends:
  template: ../templates/default-build.yml
  parameters:
    solution: '**/ASolution.sln'
Run Code Online (Sandbox Code Playgroud)

模板如下所示:

parameters:
- name: solution
  type: string
  default: ''

name: $(Build.DefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)  # Trying to set Build.BuildNumber

variables:
  solution: ${{ parameters.solution }}
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

stages:
- stage: build_solution
  jobs:
    - job:
      steps:
        - task: VSBuild@1
          displayName: 'Build solution $(solution)'
          inputs:
            solution: $(solution)
            platform: '$(BuildPlatform)'
            configuration: '$(BuildConfiguration)'

        - task: PublishBuildArtifacts@1
          displayName: 'Publish Artifact'
          inputs: …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines

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

通过组合两个列表来创建列表

我是.Net的新手.我有两个对象,CustomerCountry在我的项目:

public class Customer
{
  public int CustomerId {get;set;}
  public string CustomerName {get;set}
  public String Street {get;set}
  public String Address {get;set}
  public int CountryId {get;set}
  //...o
}


public class Country
{
  public int CountryId {get;set;}
  public String CountryName{get;set}
}
Run Code Online (Sandbox Code Playgroud)

我有两个清单,List<Customer>List<Country>.

我正在使用sql join语句列出具有国家/地区的客户.但我很困惑如何创建一个包含客户以及国家/地区名称的列表.

是否有必要为此创建单独的类?

提前致谢.

c#

3
推荐指数
1
解决办法
161
查看次数

在为WCF REST服务的自定义(反)序列化实现IDispatchMessageFormatter时,如何读取Message对象的主体?

我正在扩展WebHttpBehavior以公开具有自定义序列化和反序列化的WCF REST服务(以及与该问题无关的一定数量的其他功能).

新行为使用实现IDispatchMessageFormatter来执行服务所服务的POCO的自定义序列化和反序列化,并通过SerializeReplyDeserializeRequest方法发送给它.

我可以完全按照我需要的方式提供XML和JSON SerializeReply.

我可以毫无问题地反序列化XML,但是我似乎无法找到反序列化JSON消息的方法,因为我无法获取Message参数中包含的纯文本DeserializeRequest.

这就是现在的代码DeserializeRequest:

if (format == System.ServiceModel.Web.WebMessageFormat.Json)
{
    var data = ""; // TODO obtain plain text from Message object

    var json = JsonConvert.DeserializeObject(data, paramType, new IsoDateTimeConverter(), new StringEnumConverter());

    parameters[paramIndex] = json;
}
else
{
    var serializer = new System.Xml.Serialization.XmlSerializer(paramType, string.Empty);

    var reader = message.GetReaderAtBodyContents();

    parameters[paramIndex] = serializer.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Json.NET进行JSON()序列化.

关于如何从Message对象获取纯文本以便反序列化的任何建议将不胜感激.

如果您认为我的方法有问题,我也希望在评论中听到它.

wcf serialization json wcf-binding

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

当应用关闭并收到通知时,MvvmCross如何在通知服务中初始化?

我在我的应用程序中创建了一个服务,用于侦听来自GCM的推送通知.

OnMessage在我测试过的所有场景中都会正确调用服务的方法:app在前台运行,app在后台运行,app不运行.但是,当应用程序未运行时,代码NullReferenceException在尝试解析依赖项时抛出一个Mvx.Resolve.

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at Cirrious.CrossCore.Mvx.Resolve[IRepository] () [0x00000] in <filename unknown>:0 
  at MyApp.Android.Notifications.GcmService+<OnMessage>d__3.MoveNext () [0x00000] in <filename unknown>:0 
Process my.app.droid (pid 7846) has died.
Run Code Online (Sandbox Code Playgroud)

看来,由于应用程序没有运行,Setup该类尚未执行,IoC容器不知道如何解析我的类型.或者,更糟糕的是,该Mvx课程尚未初始化而且根本没有.

我似乎无法在网上找到关于如何解决这个问题的文档.

我运气不好,不得不尝试使用通知中发送的信息启动我的应用程序,只IRepository在应用程序完全启动后才对我执行操作?

或者有没有办法确保Mvx在应用程序关闭时运行的服务被系统激活时正确初始化?当然,这将是更好的选择,因为我可能会在其他后台服务中遇到这种情况,听取互联网访问更改或位置更改.

android push-notification mvvmcross

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

转换器无法将"Windows.Foundation.String"类型的值转换为"ImageSource"类型

这适用于我的Windows 8应用:

在我的对象中,我有一个字符串属性,包含我想要使用的图像的路径.

public String ImagePath
Run Code Online (Sandbox Code Playgroud)

在我的XAML中,我设置了一个带有以下绑定的Image标签:

<Image Source="{Binding ImagePath}" Margin="50"/>
Run Code Online (Sandbox Code Playgroud)

当我引用我已包含在项目中的图像(在"资源"文件夹中)时,图像会正确显示.路径是:Assets/car2.png

但是,当我引用用户选择的图像时(使用FilePicker),我得到一个错误(没有图像).路径是:C:\Users\Jeff\Pictures\myImage.PNG

转换器无法将"Windows.Foundation.String"类型的值转换为"ImageSource"类型

只是添加更多信息.当我使用文件选择器时,我将文件位置转换为URI:

        Uri uriAddress =  new Uri(file.Path.ToString());
        _VM.vehicleSingle.ImagePath = uriAddress.LocalPath;
Run Code Online (Sandbox Code Playgroud)

更新:

我也将此图像路径保存到隔离存储.我认为这就是问题所在.我能够保存所选文件的路径,但是当我在重新加载隔离存储时尝试绑定它时它不起作用.

因此,如果我不能在应用程序目录之外使用图像.有没有办法可以保存该图像并将其添加到目录中?

我尝试为我的模型创建一个BitmapImage属性,但现在我收到错误声明它无法序列化BitmapImage.

xaml windows-8

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

Windows Phone 8的默认控件模板

我想对我的Windows Phone 8应用程序中的某些控件的默认控件模板进行一些小的修改.问题是我找不到这些默认模板.谁知道他们在哪里可以找到?

我在寻找的东西像这样,但这是WPF和不WP8.

谢谢

xaml windows-phone-8

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

为什么调用等待过早地完成父任务?

我正在尝试创建一个控件,该控件公开DoLoading消费者可以订阅的事件以执行加载操作.为方便起见,事件处理程序应该从UI线程使消费者能够随意更新UI叫,但他们也将能够使用异步/等待对该不会阻塞UI线程中执行长时间运行的任务.

为此,我宣布了以下代表:

public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e);
Run Code Online (Sandbox Code Playgroud)

这允许消费者订阅该活动:

public event AsyncEventHandler<bool> DoLoading;
Run Code Online (Sandbox Code Playgroud)

这个想法是消费者将订阅事件(这条线在UI线程中执行):

loader.DoLoading += async (s, e) =>
            {
                for (var i = 5; i > 0; i--)
                {
                    loader.Text = i.ToString(); // UI update
                    await Task.Delay(1000); // long-running task doesn't block UI
                }
            };
Run Code Online (Sandbox Code Playgroud)

在适当的时间点,我正在获取TaskSchedulerUI线程并存储它_uiScheduler.

适当时由loader以下行触发事件(这发生在随机线程中):

this.PerformLoadingActionAsync().ContinueWith(
            _ =>
            {
                // Other operations that must happen on UI thread
            },
            _uiScheduler);
Run Code Online (Sandbox Code Playgroud)

请注意,此行不是从UI线程调用的,但需要在加载完成时更新UI,因此我ContinueWith在加载任务完成时用于在UI任务调度程序上执行代码.

我已经尝试了以下方法的几种变体,其中没有一种方法有效,所以这就是我所处的位置:

private async Task<Task> …
Run Code Online (Sandbox Code Playgroud)

.net c# async-await winrt-xaml

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

foreach语句中的多个where子句c#

我有以下声明:

foreach (var textBlock in scoresGrid.Children.OfType<TextBlock>().Where(three => three.Name.Contains("Three")))
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这样我才能做到这一点呢where name contain three or four

请帮忙.谢谢

c# linq where

0
推荐指数
1
解决办法
1716
查看次数