我无法让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) …
我正在尝试将导航控制器作为模态呈现,我收到此警告:
错误:(null)不是有效的包含控制器密钥路径
有谁知道我做错了什么?我只是将一个segue从另一个导航控制器中的按钮连接到指定的导航控制器,它将无法工作,我收到此警告.
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) 我正在编写一个通过官方SDK与TFS集成的应用程序,以自动化和支持各种常见操作.虽然大多数都是自动化,而且TFS API几乎暴露了我需要的一切,但是一些操作需要用户干预,所以我需要向用户显示信息.
我发现了一些方法Difference.VisualDiffItems
,可以让我使用Visual Studio使用的相同UI轻松地直观地比较文件.我还需要显示项目的历史记录(包括分支,重命名等),我很乐意使用内置的UI而不必编写自己的UI.项目历史UI实际上非常复杂,我认为MS会在SDK中提供它,但我似乎无法找到它.
任何人都可以确认TFS SDK没有提供可视化项目历史记录的必要方法,或者指向正确的方向吗?
我有一个用例,其中我想使用.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) 我需要创建多个构建定义,它们都将执行完全相同的步骤。基本上,改变的只是触发器和一些参数。因此,我将它们全部基于一个可以完成所有繁重工作的模板。效果很好。
$(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) 我是.Net的新手.我有两个对象,Customer
并Country
在我的项目:
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语句列出具有国家/地区的客户.但我很困惑如何创建一个包含客户以及国家/地区名称的列表.
是否有必要为此创建单独的类?
提前致谢.
我正在扩展WebHttpBehavior
以公开具有自定义序列化和反序列化的WCF REST服务(以及与该问题无关的一定数量的其他功能).
新行为使用实现IDispatchMessageFormatter
来执行服务所服务的POCO的自定义序列化和反序列化,并通过SerializeReply
和DeserializeRequest
方法发送给它.
我可以完全按照我需要的方式提供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)
关于如何从Message
对象获取纯文本以便反序列化的任何建议将不胜感激.
如果您认为我的方法有问题,我也希望在评论中听到它.
我在我的应用程序中创建了一个服务,用于侦听来自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
在应用程序关闭时运行的服务被系统激活时正确初始化?当然,这将是更好的选择,因为我可能会在其他后台服务中遇到这种情况,听取互联网访问更改或位置更改.
这适用于我的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.
我想对我的Windows Phone 8应用程序中的某些控件的默认控件模板进行一些小的修改.问题是我找不到这些默认模板.谁知道他们在哪里可以找到?
我在寻找的东西像这样,但这是WPF和不WP8.
谢谢
我正在尝试创建一个控件,该控件公开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)
在适当的时间点,我正在获取TaskScheduler
UI线程并存储它_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) 我有以下声明:
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# ×5
.net ×3
xaml ×2
.net-core ×1
android ×1
asp.net-core ×1
async-await ×1
azure-devops ×1
ios5 ×1
json ×1
linq ×1
mvvmcross ×1
printing ×1
storyboard ×1
tfs ×1
tfs-sdk ×1
wcf ×1
wcf-binding ×1
where ×1
windows-8 ×1
winrt-xaml ×1
wpf ×1
xcode4.2 ×1