今天我遇到了与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)
感谢帮助.这是我的第一个问题所以我希望我做的一切都很好:)
是否可以创建泛型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) 我正在尝试获取“应用程序”类型(而不是“后台进程”或“Windows 进程”)类型的所有进程的列表。

不幸的是,虽然我知道...
var processList = Process.GetProcesses();
Run Code Online (Sandbox Code Playgroud)
将为我提供系统上运行的所有进程的列表,我不知道如何获取进程的“类型”。“Process”确实有一个方法“GetType”,但它似乎并不指代我所指的“类型”,而 TaskManager 在上图中指的是“类型”。
有谁知道如何将任务管理器称为“类型”的值获取到给定进程的变量中?
注:C#。
我想压缩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) 新手在这里.我一直试图围绕数据绑定,并希望尝试将视图中的复选框双向绑定到我称为"状态"的单独类中的布尔值.关键是要确保它们始终保持同步.
所以我在视图中创建了一个复选框,并将其绑定到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) 我有一个班级(简化样本,只显示相关部分)
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>?
我正在使用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 项目,项目名称为“Application1”。我想更改这个名称,它也是我的项目类的命名空间。
我可以从项目属性中做到这一点吗?我想把它改成合理的名字。我试图从背后的代码中做到这一点,但没有成功。
命名空间是从项目名称中自动获取的吗?
namespace Application1
{
public partial class MainWindow : Window
{
}
}
Run Code Online (Sandbox Code Playgroud) 启动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) 我已经看过了,但无法弄清楚为什么当我启用了空引用类型时,当我在构造函数中为字符串参数传递空值时,我没有收到异常。
构造函数参数不会被视为不可为空吗?
这是我的构造函数:
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# ×10
wpf ×4
.net-core ×1
async-await ×1
asynchronous ×1
compression ×1
data-binding ×1
diagnostics ×1
generics ×1
hlsl ×1
ienumerator ×1
image ×1
lambda ×1
png ×1
process ×1
project ×1
public ×1
types ×1
uwp ×1
windows ×1
xaml ×1