小编Pet*_*iho的帖子

C#中的收益率返回 - 对字段的公开进行失败测试

今天我遇到了与C#有关的问题.我必须编写一个程序来通过一些测试.我实现的所有东西都正常工作,但有一个测试不允许使用公共字段,但它失败了.

我有一个实现IEnumerable的泛型类,导致问题的是:

public IEnumerator<R> GetEnumerator()
{
    foreach (R r in roomList)
        yield return r;
}
Run Code Online (Sandbox Code Playgroud)

如果我把这个类"返回null",测试通过正常.我想知道什么是错的?这是一份测试报告:

Result Message:       Assert.Fail failed. Detected type "Exercise.Hotel`2+<GetEnumerator>d__0" with public filed(s) "Exercise.Hotel`2[R,SC] <>4__this, R <r>5__1, Enumerator <>7__wrap2", which is not allowed.
Run Code Online (Sandbox Code Playgroud)

这里也是测试代码.说实话,我不太熟悉它是如何工作的.当然它也可能是由于测试不好造成的.

        var withPublicField = types.Where(t => !t.IsEnum)
            .Where(t => t.GetFields(BindingFlags.Public | BindingFlags.Instance).Count() > 0)
            .Where(t => !t.Name.StartsWith("<>c__DisplayClass"))
            .ToDictionary(t => t.FullName, t => t.GetFields(BindingFlags.Public | BindingFlags.Instance));
Run Code Online (Sandbox Code Playgroud)

感谢帮助.这是我的第一个问题所以我希望我做的一切都很好:)

c# ienumerator public

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

是否可以创建通用的Func <T> <T>

是否可以创建泛型Func<T><T>,如在Func中接受泛型参数并需要返回该泛型参数的类型?

换句话说,我可以这样做吗?

Func<T> createNull = () => default(T);
Run Code Online (Sandbox Code Playgroud)

请注意,我没有包含类或方法的任何上下文,所以我想这样做:

var user = createNull<User>();
Run Code Online (Sandbox Code Playgroud)

这里有一些关于我正在尝试做什么的信息.(注意语法是关闭的,因为我不知道该怎么做,也不知道它是否可能):

Func<TQuery, TResult><TQuery, TResult> query = q => 
    (TResult) handlers[Tuple.Create(typeof(TQuery), typeof(TResult))](q);
Run Code Online (Sandbox Code Playgroud)

处理程序声明如下:

var handlers = new Dictionary<Tuple<Type, Type>, Func<TQuery, TResult><TQuery, TResult>();
// examples
handlers.Add(Tuple.Create(typeof(ById), typeof(User)), 
             idQuery => new User());
handlers.Add(Tuple.Create(typeof(ByName), typeof(Customer)), 
             otherQuery => new Customer());
Run Code Online (Sandbox Code Playgroud)

然后我想这样用query:

User result = query<User, IdQuery>(new ById{Id = 1});
Customer result1 = query<Customer, ByName>(new ByName());
Run Code Online (Sandbox Code Playgroud)

c# generics lambda

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

如何获取进程“类型”(应用程序、后台进程或 Windows 进程)

我正在尝试获取“应用程序”类型(而不是“后台进程”或“Windows 进程”)类型的所有进程的列表。

“应用程序”类型

不幸的是,虽然我知道...

var processList = Process.GetProcesses();
Run Code Online (Sandbox Code Playgroud)

将为我提供系统上运行的所有进程的列表,我不知道如何获取进程的“类型”。“Process”确实有一个方法“GetType”,但它似乎并不指代我所指的“类型”,而 TaskManager 在上图中指的是“类型”。

有谁知道如何将任务管理器称为“类型”的值获取到给定进程的变量中?

注:C#。

c# windows types diagnostics process

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

我必须压缩PNG文件图像,而不会失去质量

我想压缩PNG图像,以减小其大小,但质量应保持不变.我试图压缩JPEG图片.图片压缩了大约90%,质量保持不变,但是当我用它压缩PNG图像时.没有结果,没有压缩.大小相同.

这是我的代码.

public const string _StatusLog = "StatusLog.csv";
        static void Main(string[] args)
        {
            Console.WriteLine("                 ###   WELCOME   ###");
            Console.Write("\n\nPlease enter image folder path :");
            string imagePath = Console.ReadLine();
            Program p = new Program();
            p.VaryQualityLevel(imagePath);
            Console.ReadLine();
        }
        private void VaryQualityLevel(string pathOfImage)
        {
            try
            {
                //Console.Write("Target Directory Path :");
                string targetDirectory = pathOfImage;//Console.ReadLine();

                if (targetDirectory != null)
                {
                    string[] allDirectoryInTargetDirectory = Directory.GetDirectories(targetDirectory);
                    //PRODUCT DIRECOTY OPEN
                    Console.Write("Total Folders found = " + allDirectoryInTargetDirectory.Count());
                    Console.Read();
                    if (allDirectoryInTargetDirectory.Any())
                    {
                        foreach (var directory in allDirectoryInTargetDirectory)
                        {
                            string[] …
Run Code Online (Sandbox Code Playgroud)

c# compression png image

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

如何为我的bool属性正确实现INotifyPropertyChanged并绑定到CheckBox.IsChecked?

新手在这里.我一直试图围绕数据绑定,并希望尝试将视图中的复选框双向绑定到我称为"状态"的单独类中的布尔值.关键是要确保它们始终保持同步.

所以我在视图中创建了一个复选框,并将其绑定到State-class中前面提到的布尔属性,并伴有一个按钮,该按钮绕过复选框并直接切换布尔属性(恰当地标记为'Ninja!').关键在于测试复选框的数据绑定在属性更改时的反应.但是,我不能最好地弄清楚当属性更改时应该如何调用OnPropertyChanged方法.

这是我到目前为止所拥有的:

<CheckBox x:Name="checkBox" Content="CheckBox" HorizontalAlignment="Left" Margin="232,109,0,0" VerticalAlignment="Top" IsChecked="{Binding Checked, Mode=TwoWay}"/>
<Button x:Name="button" Content="Ninja!" HorizontalAlignment="Left" Margin="228,182,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
Run Code Online (Sandbox Code Playgroud)

我所做的"州"级代码:

namespace TestTwoWayBinding
{
    class State : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private bool _checked;
        public bool Checked {
            get
            {
                return _checked;
            }
            set
            {
                _checked = value;
                OnPropertyChanged(Checked);
            }
        }       

        public void Toggle()
        {
            if (!Checked)
            {
                Checked = true;
            }
            else
            {  
                Checked = false;

            }
        }

        public State(bool c)
        {
            this.Checked = c;
        }

        protected …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf

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

为什么异步方法返回类型不能从Task派生?

我有一个班级(简化样本,只显示相关部分)

public class AsyncScenario : Task<Scenario>
{
    public async AsyncScenario Test(Func<Task> action)
    {
        return await this;           
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法编译这个因为方法的返回类型:

编译器错误CS1983:"异步方法的返回类型必须为void,任务或任务<T>"

为什么异步方法不允许返回派生自的类Task<T>

c# asynchronous async-await

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

如何使用C#反转XAML PNG图像的颜色?

我正在使用Visual Studio,C#,XAML,WPF.

在我的程序中,我有带有白色png图标的XAML按钮.

在此输入图像描述

我想拥有它,所以你可以通过从ComboBox中选择主题来切换到带有黑色图标的主题.

不是创建一组新的黑色png图像,有没有办法使用XAML和C#我可以反转白色图标的颜色?

<Button x:Name="btnInfo" HorizontalAlignment="Left" Margin="10,233,0,0" VerticalAlignment="Top" Width="22" Height="22" Cursor="Hand" Click="buttonInfo_Click" Style="{DynamicResource ButtonSmall}">
    <Image Source="Resources/Images/info.png" Width="5" Height="10" Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1,0,0,0"/>
</Button>
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml hlsl visual-studio

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

从默认的“Application1”名称更改项目名称

我有一个用 C# 编写的 WPF 项目,项目名称为“Application1”。我想更改这个名称,它也是我的项目类的命名空间。

我可以从项目属性中做到这一点吗?我想把它改成合理的名字。我试图从背后的代码中做到这一点,但没有成功。

命名空间是从项目名称中自动获取的吗?

namespace Application1
{
    public partial class MainWindow : Window
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

c# wpf project visual-studio

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

WinRT信息:找不到具有给定密钥的资源.转换器参考问题

启动UWP应用程序时出现此错误.它无法找到FirstNameToVisibilityConverter资源.如果有人能够确定我为什么会收到此错误,或者使用转换器发布UWP应用程序的小型工作样本,我将非常感激.谢谢!

XAML:

<UserControl
    x:Class="MyHelloWorld.HelloWorld"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyHelloWorld"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

<Grid>
    <Grid.Resources>
        <local:FirstNameToVisibilityConverter x:Key="FirstNameToVisibilityConverter"/>
        <p:Style TargetType="TextBox">
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </p:Style>
    </Grid.Resources>
    <StackPanel>
        <TextBlock Foreground="Red">HI</TextBlock>
        <TextBlock Foreground="Red">THERE</TextBlock>
        <TextBox Foreground="Red" Text="{x:Bind FirstWord}"/>
        <TextBlock Foreground="Red" Text="{x:Bind SecondWord}" Visibility="{x:Bind FirstWord, Converter={StaticResource FirstNameToVisibilityConverter}}"/>
        <CheckBox Foreground="Red" Content="Click me to hide the first word" IsChecked="{x:Bind FirstWordChecked}"/>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

代码背后:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data; …
Run Code Online (Sandbox Code Playgroud)

c# wpf uwp

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

为什么构造函数中的空字符串参数不会引发异常?

我已经看过了,但无法弄清楚为什么当我启用了空引用类型时,当我在构造函数中为字符串参数传递空值时,我没有收到异常。

构造函数参数不会被视为不可为空吗?

这是我的构造函数:

public ApiClient( string baseUrl, string authorizationToken ) {

    string testString = null;
    _apiClientBaseUrl = baseUrl ?? throw new ArgumentNullException( $"{nameof(baseUrl)} cannot be null" );
    _authorizationToken = authorizationToken ?? throw new ArgumentNullException( $"{nameof(authorizationToken)} cannot be null" );
}
Run Code Online (Sandbox Code Playgroud)

我确实收到该string testString = null;行的错误。如果我删除编码的空测试,我可以为 2 个属性传入空值,并且不会出现任何错误。该对象将实例化得很好。

我在一个 .NET Core 3.1 项目中,在 .csproj 文件中:

<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <Nullable>enable</Nullable>
    <WarningsAsErrors>CS8600;CS8602;CS8603;CS8625</WarningsAsErrors>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

c# .net-core nullable-reference-types

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