无法将int转换为nullable int

时间:2018-02-18 10:11:52

标签: c# asp.net nullable

在我的C#应用​​程序中,我想在一个对象中存储空值,如:

if (txtClass8Year.Text == "")
{
    distributor.Class8YrPassing = null;
}
else
{
    distributor.Class8YrPassing = Convert.ToInt32(txtClass8Year.Text);
}

但是当我试图将整个陈述写成一行时,它无效:

(txtClass8Year.Text == "") ? null : Convert.ToInt32(txtClass8Year.Text);

提前致谢。

帕塔

1 个答案:

答案 0 :(得分:2)

您需要将int结果转发回Nullable<int>作为int,与int?的类型不同,并且不能隐式转换为distributor.Class8YrPassing = (txtClass8Year.Text == "") ? null : (int?)Convert.ToInt32(txtClass8Year.Text); ,所以我们需要具体到那里:

null

或者您也可以将int?投放到distributor.Class8YrPassing = (txtClass8Year.Text == "") ? (int?)null : Convert.ToInt32(txtClass8Year.Text); 也可以使用:

String.IsNullOrEmpty

对于三元运算符,我们需要确保在两种情况下都返回相同的类型,否则编译器会给出如上所述的错误。

并建议更好的方法是使用""方法而不是检查distributor.Class8YrPassing = String.IsNullOrEmpty(txtClass8Year.Text) || String.IsNullOrWhiteSpace(txtClass8Year.Text) ? null : (int?)Convert.ToInt32(txtClass8Year.Text); 文字字符串:

import tensorflow as tf
import numpy as np
from PIL import Image
from tensorflow.python.keras._impl.keras.applications import imagenet_utils


model = tf.keras.applications.VGG16()
VGG = model.graph

VGG.get_operations()
input = VGG.get_tensor_by_name("input_1:0")
output = VGG.get_tensor_by_name("predictions/Softmax:0")
print(input)
print(output)

I = Image.open("Elephant.jpg")
new_img = I.resize((224,224))
image_array = np.array(new_img)[:, :, 0:3]
image_array = np.expand_dims(image_array, axis=0)


with tf.Session(graph=VGG) as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    pred = (sess.run(output,{input:image_array}))
    print(imagenet_utils.decode_predictions(pred))