我担心这是一个非常愚蠢的问题,但我必须遗漏一些东西.
为什么可能要使用String.Copy(string)?
文档说明了这种方法
使用与指定String相同的值创建String的新实例.
由于字符串在.NET中是不可变的,我不确定使用此方法的好处是什么,正如我所想的那样
string copy = String.Copy(otherString);
Run Code Online (Sandbox Code Playgroud)
出于所有实际目的,似乎会产生与之相同的结果
string copy = otherString;
Run Code Online (Sandbox Code Playgroud)
也就是说,除了正在进行的任何内部簿记,以及副本不是ReferenceEqualsotherString 的事实,没有可观察到的差异 - 字符串是一个不可变的类,其相等性基于值,而不是身份.(感谢@Andrew Hare指出我的原始措辞不够精确,表明我意识到Copying和not 之间存在差异,但是担心缺乏有用的差异.)
当然,当传递null参数时,Copy会抛出一个ArgumentNullException,而"new instance"可能会占用更多内存.后者几乎不是一个好处,我不确定无效检查是一个足够大的奖金来保证整个复制方法.
谢谢.
我已经更新了原来问题的内容,因为我开始在试图帮助我的人们中引起一些困惑。
我正在使用库“Microsoft.ApplicationInsights.AspNetCore”将日志发送到Azure。使用该库的挑战之一是,在为该库创建服务之前,它不会向 Azure 发送任何日志事件。
先有鸡还是先有蛋的情况是,我需要在 Net Core 6 Web 应用程序启动过程的最早阶段(即在 App Insights 需要运行的服务实际创建之前)写入日志并将其发送到 Azure。
我需要在应用程序启动过程的早期阶段写入日志的原因是捕获用户登录的详细信息,其中一旦 .Net Core 应用程序启动,就会弹出 Microsoft 登录页面。
在下面的代码示例中,您可以看到我创建了记录器工厂的实例,以便我可以在构建和启动其余服务之前在program.cs文件中本地写入一些日志。尽管使用此方法适用于写入控制台,但不会将任何事件发送到 App Insights。我认为这是因为在创建所需的服务(位于program.cs 文件的后期阶段)之前,应用程序见解库尚未建立。
var builder = WebApplication.CreateBuilder(args);
// I create an instance of logger factory
using var loggerFactory = LoggerFactory.Create(loggingBuilder => loggingBuilder
.SetMinimumLevel(LogLevel.Trace)
.AddConsole()
.AddApplicationInsights(builder.Configuration["APPINSIGHTS_CONNECTIONSTRING"]));
// I use the logger factory to create an instance of Ilogger
ILogger logger = loggerFactory.CreateLogger<Program>();
// This code section here is related to Microsoft Identity Web library and is responsible for
// triggering …Run Code Online (Sandbox Code Playgroud) 我正在使用WPF扩展工具包来显示Team对象的属性.现在其中一个属性是人物集合.没问题,我得到一个很好的下拉,当我点击时,向我显示每个人的姓名和年龄.

现在的问题是我实际上并不希望将我的Collection公开为public.但是,只要我将其setter设为私有,就会禁用该属性,以防止用户看到Person集合和人员详细信息:

当它的setter是私有的时候我该如何显示我的Person Collection?我可以使用XAML模板执行此操作吗?如果是这样的话?我正在使用MVVM,因此我不想在代码中添加任何内容.
更新
好的,所以@tencntraze的解决方案让我大部分都在那里 - 谢谢.但是它对于对象的集合不起作用,这是我在我的情况下得到的.此外,它还可以简化为使用CollectionControlDialog而不是下面实现的自定义ReadOnlyCollectionViewer.
XAML
<UserControl x:Class="DevExpressTreeList.ReadOnlyCollectionEditor"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="MyUserControl"
>
<DockPanel>
<Button Click="Button_OnClick" DockPanel.Dock="Right">
<Label Content="?" Padding="2,0,2,0" />
</Button>
<Label Name="CollectionLabel" Content="(Collection)" Padding="2,2,2,0" />
</DockPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
代码隐藏
public partial class ReadOnlyCollectionEditor : UserControl, ITypeEditor
{
public ReadOnlyCollectionEditor()
{
InitializeComponent();
}
// Use typeof(object) to allow for any Collection<T>
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
"Value", typeof(object), typeof(ReadOnlyCollectionEditor), new PropertyMetadata(default(object)));
public object Value
{
// We are now using …Run Code Online (Sandbox Code Playgroud) 我有一个拍照的Android应用程序(用React Native编写,但我可以添加本机模块,如果需要的话)与用户计算机上的库类型应用程序配对(使用React编写电子版).照片的数量可能很大(我们一次有超过一千张照片),并且需要将它们转移到未计算和未剪切的计算机应用程序中.我需要一种可靠的方法来实现这一点,而无需首先通过Internet路由数据.
我尝试过的事情
节点USB:看起来像一个好的库,但无法在用户的计算机上安装驱动程序.然后驱动程序似乎替换默认的Windows USB驱动程序,并且通过正常方式(在Windows中打开文件浏览器)无法访问手机.也许有一些方法可以"动态"切换驱动程序,仅在传输照片时使用驱动程序,然后在完成后将其切换回系统驱动程序?
亚行:这是我尝试的原始解决方案,它完全符合我的需要,有两个突破性的问题:首先,手机需要启用开发模式,而对于两个,ADB似乎无法识别所有设备(例如,我们在使用LG V20时遇到了很多麻烦).这个问题的理想答案就像亚行没有这两个问题.
WiFi路由:我们将手机连接到与主机相同的WiFi网络,使用WebSockets通过互联网握手IP,然后通过WiFi网络启动直接连接.如果我找不到任何其他解决方案,这可能是我要去的那个.此选项的最大问题是需要相对大量的手动设置.我们的用户往往不是非常精通技术,我不知道假设他们家里有WiFi,这是多么合理.无论如何,这不是转移的唯一选择.此外,通过无线网络传输千兆字节的照片将导致同一网络上的每个人的速度减慢.
系绳路由:我们将电话连接到计算机,并以与上述步骤相同的方式启动直接连接.这种方法的缺点是只有带有SIM卡的手机才能激活网络共享(并非所有手机都有SIM卡,因为连接不是我们需要的主要目的),而且计算机上的所有其他流量现在都是通过电话路由,这对于拥有SIM卡的客户数据上限不利.此外,没有办法以编程方式转动网络共享,只有能够启动网络共享菜单; 这不是一个太大的交易破坏者,但其他两个非常重要.
蓝牙:通常符合我的要求,但数据传输速率太低,比WiFi低一个数量级.
WiFi Direct:我实际上并没有尝试这个,因为我找不到让PC接受WiFi Direct连接的工作方式.它承诺超高的速度,但我发现没有可以帮助我启用它的模块或库.
SD卡:低技术方法中最低的,只需将所有内容保存到SD卡中,让客户端取出卡并将其插入计算机.除了需要SD卡端口(保证客户端的计算机或手机都没有保证)之外,请不要这样做.
显而易见:手动将所需文件从手机拖放到PC.这就是我们现在做的事情,它充满了问题.由于某种原因,文本文件在传输过程中会切断最后15-20个字符; 由于MTP没有强制手机上的媒体重新扫描的已知问题,设备上的许多照片最初都没有显示出来; 并且用户有时会将文件放在错误的位置,导致不必要的支持呼叫.这种方法肯定需要更换.
我已经在两个月内一直在寻找这个问题的解决方案了,而且很难相信没有像这样的Android用例.已经明确表示Android和PC之间的USB通信并非易事,我确信有些程序可以做到这一点,Windows也是如此.然而,尽我所能,没有任何解决方案可以开箱即用.以前有人处理过这样的问题吗?你的解决方案是什么?你会如何解决这个问题?
有几篇文章解释了 BindingOperations.EnableCollectionSynchronization 的用法。例如WPF 中的 BindingOperations.EnableCollectionSynchronization 之谜或使用 BindingOperations.EnableCollectionSynchronization
但是,我对“锁”的理解与以下演示的行为不符。
private void Button_Click(object sender, RoutedEventArgs e)
{
var itemsLock = new object();
var items = new ObservableCollection<string>();
BindingOperations.EnableCollectionSynchronization(items, itemsLock);
Task.Run(() =>
{
lock (itemsLock)
{
Debug.WriteLine("task inside lock");
Thread.Sleep(5000);
items.Where(m => m == "foo").ToArray();
}
Debug.WriteLine("task outside lock");
});
Thread.Sleep(1000);
Debug.WriteLine("UI thread add..");
items.Add("foo");
Debug.WriteLine("UI thread add..done");
}
Run Code Online (Sandbox Code Playgroud)
由于锁定,我预计调试输出如下:
task inside lock
UI thread add..
task outside lock
UI thread add..done
Run Code Online (Sandbox Code Playgroud)
但我发现这样的调试输出:
task inside lock
UI thread add..
UI …Run Code Online (Sandbox Code Playgroud) 您如何become在ansible中使用角色的用户?
例如,如何使用ansible geerlingguy.nodejsgalaxy中的角色将rootjs安装为root ?这是我所拥有的相关部分:
roles:
- geerlingguy.nodejs
become: yes
Run Code Online (Sandbox Code Playgroud)
但这会ERROR! Syntax Error while loading YAML在YAML文件上产生。
c# ×3
wpf ×2
.net ×1
android ×1
ansible ×1
ansible-role ×1
copy ×1
ilogger ×1
immutability ×1
mvvm ×1
node.js ×1
react-native ×1
string ×1
usb ×1
wpftoolkit ×1
xaml ×1