C#中为数组属性编写if语句报错,请求技术帮助
问题排查与解决
我帮你梳理下这段C#代码里的问题,核心错误出在属性setter的判断逻辑上:
错误原因
你的Arr属性是int[](整数数组)类型,所以setter方法里的value是一个数组对象,而你写的value < 0是试图把数组和整数做比较——C#根本不允许这种跨类型的比较操作,这就是代码报错的直接原因。
针对需求的修正方案
我猜你应该是想确保传入的数组中没有负数元素,下面给出对应修正代码,同时补充几种常见场景的处理方式:
场景1:确保数组中所有元素都不小于0
遍历传入的数组,逐个检查元素是否合法:
public class hamid { private int[] arr = new int[10]; public int[] Arr { get => arr; set { // 先判断传入的数组是否为空,避免空引用异常 if (value == null) { Environment.Exit(1); } // 遍历每个元素,检查是否有负数 foreach (int num in value) { if (num < 0) { Environment.Exit(1); } } // 检查通过后赋值 arr = value; } } }
场景2:同时限制数组长度(比如保持原数组的长度10)
如果你还想确保传入的数组长度和原数组一致,可以加上长度判断:
public int[] Arr { get => arr; set { if (value == null || value.Length != 10) { Environment.Exit(1); } // 额外检查元素非负的话,加上遍历逻辑 foreach (int num in value) { if (num < 0) { Environment.Exit(1); } } arr = value; } }
额外优化建议
用Environment.Exit(1)直接退出程序并不是处理错误的最佳实践,更推荐抛出明确的异常,让调用方可以捕获并针对性处理错误,比如:
if (num < 0) { throw new ArgumentOutOfRangeException(nameof(value), "数组中不能包含负数元素"); }
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

