小编Nic*_*ick的帖子

你如何使用 System.Text.Json 从一些 json 中读取一个简单的值?

我有这个 json

{"id":"48e86841-f62c-42c9-ae20-b54ba8c35d6d"}
Run Code Online (Sandbox Code Playgroud)

我如何48e86841-f62c-42c9-ae20-b54ba8c35d6d摆脱它?我能找到的所有例子都显示做类似的事情

var o = System.Text.Json.JsonSerializer.Deserialize<some-type>(json);
o.id // <- here's the ID!
Run Code Online (Sandbox Code Playgroud)

但是我没有符合这个定义的类型,我不想创建一个。我试过反序列化为动态,但我无法让它工作。

var result = System.Text.Json.JsonSerializer.Deserialize<dynamic>(json);
result.id // <-- An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Linq.Expressions.dll but was not handled in user code: ''System.Text.Json.JsonElement' does not contain a definition for 'id''
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供任何建议吗?


编辑:

我刚刚发现我可以这样做:

Guid id = System.Text.Json.JsonDocument.Parse(json).RootElement.GetProperty("id").GetGuid();
Run Code Online (Sandbox Code Playgroud)

这确实有效 - 但有更好的方法吗?

c# .net-core system.text.json

39
推荐指数
4
解决办法
3万
查看次数

如何扩展此查询以查找三个项目的有效组合?

我完全不希望在这里得到任何答案,但无论如何我都会尝试.

所以这出演了天际.我想要一种简单的方法来查找哪些成分可以组合成不同的药水/毒药,所以我制作了一个有ID和名字的成分表; 具有ID,名称,毒药标志和药水标志的效果表(药水和毒药是互斥的); 以及具有成分ID和效果ID的连接表.

因此它的工作方式是每种成分都有4种不同的效果,对多种成分重复效果.在游戏中你可以组合2或3种成分,结果是一种药水或毒药,所有的效果都与至少2种成分相匹配.因此,如果您使用3种成分并且effect1同时出现在ingredient1和ingredient2上,而effect2同时出现在ingredient1和ingredient3上,那么结果将是具有effect1和effect2的药水/毒药.

我能够自己提出一个查询,它将显示每种可能的2种成分组合,它们会产生一种没有毒害效果的药水.首先,我需要找到每种可能的2种成分组合,它们只具有非毒性的匹配效果:

SELECT i1.UniqIngredient UniqIngredient1, i2.UniqIngredient UniqIngredient2
FROM Ingredient i1
CROSS JOIN Ingredient i2
INNER JOIN IngredientEffectJT jt1 ON i1.UniqIngredient = jt1.UniqIngredient
INNER JOIN IngredientEffectJT jt2 ON i2.UniqIngredient = jt2.UniqIngredient
INNER JOIN Effect e ON jt1.UniqEffect = e.UniqEffect AND jt2.UniqEffect = e.UniqEffect
WHERE i1.UniqIngredient < i2.UniqIngredient
GROUP BY i1.UniqIngredient, i2.UniqIngredient
HAVING SUM(e.Poison) = 0
Run Code Online (Sandbox Code Playgroud)

成分与成分交叉连接以获得每种组合,但由于成分的顺序无关紧要,我最终会得到两倍的结果.这就是WHERE检查i1.UniqIngredient <i2.UniqIngredient的原因.我只会看到每种组合一次,2种成分的较低ID将始终位于第1列.我将两种成分加入到相同的效果中,因为我只关心产生结果的组合.然后我用2种成分对它们进行分组并计算它们共有多少毒害效果,因为我只想要具有0种毒素效果的组合.

然后我将这个结果用作一个表格,我将其加入到成分和效果表中,以获得生成药水的每种可能的2种成分组合的列表,以及每种组合的效果:

SELECT i1.Name, i2.Name, e.Name
FROM (SELECT i1.UniqIngredient UniqIngredient1, i2.UniqIngredient UniqIngredient2
FROM Ingredient i1
CROSS JOIN Ingredient i2
INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

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

伪装配不产生

我无法弄清楚我需要做些什么来生成Fakes.在我的测试项目中,我包含了一个我想要假装的程序集的引用.它将/ Fakes/<程序集名称> .fakes添加到我的项目中并构建了项目.有大量的警告,但有0个错误,并且构建成功完成.但它没有添加任何对生成的.Fakes程序集的引用.

大多数警告都是无法为枚举生成存根或填充程序的事情,或者某些私有类对于伪造程序集是不可见的.我想要Shim的程序集中只有一个类,而且我想要Stub.所以我编辑了.fakes文件:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"
       Diagnostic="true">
  <Assembly Name="[assembly name]">
    <StubGeneration>
      <Clear />
    </StubGeneration>
    <ShimGeneration>
      <Clear />
      <Add Namespace="[namespace that the 1 class I want to shim is in]" />
    </ShimGeneration>
  </Assembly>
</Fakes>
Run Code Online (Sandbox Code Playgroud)

我清理并重建了项目,我仍然收到大量的警告,并且没有错误,它不能存储或填充我在.fakes文件中排除的类,并且仍然没有生成.Fakes程序集.

我如何阻止它尝试创建存根并仅为特定命名空间中的类创建填充程序?来自http://msdn.microsoft.com/en-us/library/hh708916.aspx的信息显然不正确.

此外,我从Assembly元素中删除了Version属性,但是我得到的警告仍然包含命名空间中的版本号.那是怎么回事?

microsoft-fakes visual-studio-2013

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

你如何编程编辑.png?

我有28个图像,每个图像有3个尺寸(总共84个),这些图像都是单色的,每个图像都有不同的alpha图层.我想让它们以5种不同的颜色提供.那将是420张图片.这显然是手动操作的巨大痛苦.我没有Photoshop,所以任何类型的photoshop功能都不是一个有效的答案.我有Paint.NET但调整色调对我不起作用,因为单独改变色调并不能给我我想要的颜色.

基本上我需要做的是对于图像中的每个像素,取RGBA值并用新的RGB值替换RGB并保持相同的A值.

有人知道怎么做吗?我没有运气搜索StackOverflow或Google(可能使用错误的搜索条件).

我更喜欢C#或VB.NET中的答案,但如果有人知道如何用任何语言做到这一点,我可以将它应用于C#或VB.NET.

- 编辑 -

如果有人发现这个并且正在寻找答案,这就是我根据Yorye Nathan的链接得到的.

private const int RED = 51;
private const int GREEN = 181;
private const int BLUE = 229;

private const int NEW_RED = 170;
private const int NEW_GREEN = 102;
private const int NEW_BLUE = 204;

private void Form1_Load(object sender, EventArgs e)
{
  if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {

    Image OriginalImage = Image.FromFile(openFileDialog1.FileName);
    Image NewImage = ColorFilter(OriginalImage);

    pictureBox1.Image = OriginalImage;
    pictureBox2.Image = NewImage;
  }

}

public static Image ColorFilter(Image originalImage)
{
  Bitmap …
Run Code Online (Sandbox Code Playgroud)

c# png

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

TFS代码审核警报

我想更改我的TFS代码审核警报,因此我只会在添加到审核时通知我对其进行更改,而不是每次同时处于审核中的其他人都发布评论.

我尝试将警报过滤器更改为:

我的评论状态=已添加

当我尝试保存这个过滤器时,我得到一个奇怪的错误,没有任何意义.

无法保存一个或多个警报:

无法解析警报的xpath表达式.请验证您的过滤条件.详细信息:'审稿人/审稿人[@Name ="@@ MyDisplayName @@"] @ Status'具有无效令牌.

我究竟做错了什么?

tfs-alerts tfs2012

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

您可以在 xaml 中的 1 行内使用 Binding ValidationRule 吗?

我不知道正确的措辞来描述我在这里想做的事情......所以我只是展示它。

我知道这个 xaml 有效:

<TextBox>
  <TextBox.Text>
    <Binding Path="Location" UpdateSourceTrigger="PropertyChanged">
      <Binding.ValidationRules>
        <domain:NotEmptyValidationRule ValidatesOnTargetUpdated="True"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

但这非常冗长。我想以类似的方式来做...

<TextBox Text={Binding Path=Location, UpdateSourceTrigger=PropertyChanged,
                       ValidationRules={domain:NotEmptyValidationRuleMarkup ValidateOnTargetUpdated=True}}"/>
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为 的类NotEmptyValidationRuleMarkup,它返回 的实例NotEmptyValidationRule,并且它可以工作。项目构建得很好,运行得很好,一切都完全按照我的预期进行。但是,我无法再在设计器中查看我的窗口。它给了我一个无效标记错误,因为The property "ValidationRules" does not have an accessible setter.. 确实如此,ValidationRules 没有 setter。如果我尝试通过 C# 代码设置 ValidationRules,则会出现编译错误。但由于某种原因,当我在 XAML 中分配它时,它实际上确实构建并运行得很好。我很困惑。有没有一种方法可以让我在不提升窗口设计视图的情况下完成这项工作?

wpf xaml

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

如何制作用于流式播放MP3文件的intent-filter?

在Android上,如果你键入一个网址在浏览器中的MP3文件(或点击链接到文件上),你会得到"完成操作使用"与所列的可播放文件(音乐,StreamFurious,流媒体的一些应用程序弹出玩家,Winamp,XiiaLive Lite,仅举几例).如何让我的应用程序显示在该列表中?

我很确定我必须添加到AndroidManifest.xml中的intent-filter,但我不知道需要在其中添加什么操作,类别或数据.谁知道我要做什么?另外,有什么方法可以追踪调用系统的意图吗?这可能会让你更容易弄清楚将来如何做其他事情.

根据我在code.google.com/p/andless/source/browse/trunk/AndroidManifest.xml?spec=svn86&r=86#看到我尝试这样做:

<activity android:name=".Main"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="audio/mp3" android:scheme="file" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

但那没有做到.然后我从市场上下载了andLess并意识到应用程序也没有显示在"使用完整操作"列表中.

android android-manifest android-intent

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

我可以阻止Android杀死我的应用吗?

我找不到任何可以在满足我要求的后台运行的URL流式传输MP3的好应用程序,所以我决定自己编写一个.事实证明,如果你正在运行Froyo或更好的话,使用原生MediaPlayer流式传输MP3非常容易,我就是这样.

但我的问题是,如果我切换应用程序并尝试保持流(其中一些持续2-4小时)并在我正在听它时玩游戏或其他东西,它有时会死掉.我不确定究竟是什么问题,我的猜测是Android系统决定杀死这个过程是可以的......但事实并非如此.

如果需要资源而不是我的流媒体mp3应用程序,我可以做些什么来杀死其他进程?

我尝试过的:

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO);
Run Code Online (Sandbox Code Playgroud)

但这并不好.

android android-mediaplayer

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

如何从 Regex.Split 和组中获得正确的结果

我想找到a)输入字符串中与模式匹配的所有部分;b) 输入字符串中与相同模式不匹配的所有部分。我正在使用 Regex.Matches 来查找匹配的部分,并尝试使用 Regex.Split 删除匹配的部分,并留下不匹配的部分。该模式是用户定义的,因此将捕获组更改为非捕获组是不可接受的。

所以,我认为Regex.Split应该删除匹配的文本并返回字符串所有剩余部分的数组。例如,输入模式为“bc”的字符串“abcd”将返回一个包含 2 个元素“a”和“d”的字符串数组。

但是,当您将组添加到模式中时,结果就会变得完全虚假。如果你运行这个:

Regex.Split("abcd", "b(c)")
Run Code Online (Sandbox Code Playgroud)

结果是:

a
c
d
Run Code Online (Sandbox Code Playgroud)

为什么拆分结果中会出现“c”?这是我想要分割的模式的一部分。我使用相同的模式来获取匹配项并分割字符串,因此将组更改为非捕获组是不可接受的。有什么方法可以实际使用正则表达式模式分割字符串(Regex.Split 显然已损坏)?

======

答案:如果模式包含捕获组,则无法使用 Regex.Split 获取模式匹配之间的字符串部分。

.net c# regex

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

!= null和!== null之间有什么区别?

对不起,我确信过去曾被问过,但很难找到这样的问题."!="和"!=="并不完全是搜索友好的.如果有人知道重复的问题你可以指出我.

myVar != null和有myVar !== null什么区别?我知道那!=not equal!==现在not equal value or not equal type,但是当与null比较时,是否会出现返回不同结果的情况?比另一个更好用吗?

javascript

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

你如何使用Application.Resources中定义的DataTemplate?

如果我的Windows无法访问其中定义的资源,Application.Resources的目的是什么?

这有效,我得到一个带有TextBox的窗口,里面写着"Loki"......

App.xaml.cs:

public partial class App : Application
{
  protected override void OnStartup(StartupEventArgs e)
  {
    base.OnStartup(e);

    ViewModel.ViewModel1 oVM = new ViewModel.ViewModel1 { Name = "Loki" };
    MainWindow oVW = new MainWindow { Content = oVM };

    oVW.ShowDialog();
  }
}
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml

<Window x:Class="TableGenerator.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:TableGenerator.ViewModel"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <DataTemplate DataType="{x:Type vm:ViewModel1}">
      <TextBox Text="{Binding Path=Name}" />
    </DataTemplate>
  </Window.Resources>
  <ContentPresenter />
</Window>
Run Code Online (Sandbox Code Playgroud)

但是将DataTemplate移动到Application.Resources而不是Window.Resources不起作用.当我运行这个时,我得到一个窗口,根本没有TextBox,但是有一些文本显示只是说我的viewmodel类的名称,"TableGenerator.ViewModel.ViewModel1".

App.xaml.cs没有变化.

MainWindow.xaml更改为:

<Window x:Class="TableGenerator.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <ContentPresenter />
</Window>
Run Code Online (Sandbox Code Playgroud)

App.xaml中:

<Application x:Class="TableGenerator.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml mvvm

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

Google表格QUERY函数 - 插入列时是否可以写入不中断?

所以我在Google表格中有一个查询

=QUERY(Transactions!C$6:F, "select C,D*-1,E,F where C > date '1990-01-01'",0)
Run Code Online (Sandbox Code Playgroud)

我的问题是,每当我在事务表中的C左侧插入一列时,函数的第一个参数中的数据范围都会正确地更新到Transactions!D$6:G,但查询不会自动更新.它仍在尝试从C列中提取数据,该数据不再包含在我的数据范围内,现在包含我不希望查询返回的数据.

有没有办法使用该QUERY函数并编写一个查询来访问相对于数据范围的列而不是工作表上的绝对列?或者,如果不是这样,有没有其他方法我可以编写查询,以便当我在左边插入一个新列而不必每次都重写查询时它仍然起作用?

google-sheets google-sheets-query

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

有没有一种简单的方法来重构C#中的参数?

我有34种不同的方法,它们使用我的ViewModel类的1个参数,但是每个方法在类上只使用了两个或三个特性.我想我宁愿把这些属性传递给这些方法而不是整个对象.这是一种轻松重构的方法吗?我试图只选择我函数中的所有文本并执行Refactor> Extract Method,希望它足够智能,只能看到对象的2个属性被使用,并使参数列表只是那2个属性,但它只是想再拿整个物体.

也许我需要解释一下我在做什么......

我正在尝试编写一个为wiki页面生成文本的应用程序.根据输入到UI中的值,它将生成模板的文本和使用该模板的文本,或者如果不需要模板,它将只生成页面的文本.它有17个不同的部分,因此有17个功能,当组合时,创建模板页面的文本,并且如果不需要模板,有17个功能组合成实际页面.我是这样做的,所以我可以一次测试它的一小部分,而不是测试一个大型函数的整个输出.

所以目前这些方法中的所有34个都采用1个参数,即从UI构建的整个对象.对我来说,没有任何意义.生成整个页面的1个部分的函数永远不需要知道在不同部分中使用的数据,如果有人试图在那里使用它,那么我就知道出了什么问题.

c# refactoring visual-studio-2012

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